-
基本数据类型:
- Java 中的
int对应 JNI 中的jint。 - Java 中的
boolean对应 JNI 中的jboolean。 - Java 中的
float对应 JNI 中的jfloat。 - Java 中的
double对应 JNI 中的jdouble。 - Java 中的
byte对应 JNI 中的jbyte。 - Java 中的
short对应 JNI 中的jshort。 - Java 中的
long对应 JNI 中的jlong。 - Java 中的
char对应 JNI 中的jchar。
- Java 中的
-
对象类型:
- Java 中的
Object对应 JNI 中的jobject。 - Java 中的
Class对应 JNI 中的jclass。 - Java 中的数组对应 JNI 中的相应类型,比如
int[]对应jintArray。
- Java 中的
-
字符串类型:
- Java 中的
String对应 JNI 中的jstring。
- Java 中的
-
其他类型:
- Java 中的
void对应 JNI 中的void。 - Java 中的
void*或者Object指针对应 JNI 中的jlong或者intptr_t。 - Java 中的枚举类型等可通过整数表示,在 JNI 中直接使用对应的整数类型。
- Java 中的
- 例如以下的举例
#include <jni.h>
#include <stdio.h>JNIEXPORT void JNICALL Java_com_ichtj_test_JNIExample_callNativeMethod(JNIEnv *env, jobject obj, jint intValue, jfloat floatValue, jdouble doubleValue, jboolean booleanValue, jchar charValue, jstring stringValue, jintArray intArray) {// 将 Java 中的 int 类型转换为 JNI 中的 jint 类型printf("Received int value in JNI: %d\n", intValue);// 将 Java 中的 float 类型转换为 JNI 中的 jfloat 类型printf("Received float value in JNI: %f\n", floatValue);// 将 Java 中的 double 类型转换为 JNI 中的 jdouble 类型printf("Received double value in JNI: %lf\n", doubleValue);// 将 Java 中的 boolean 类型转换为 JNI 中的 jboolean 类型if (booleanValue) {printf("Received boolean value in JNI: true\n");} else {printf("Received boolean value in JNI: false\n");}// 将 Java 中的 char 类型转换为 JNI 中的 jchar 类型printf("Received char value in JNI: %c\n", charValue);// 将 Java 中的 String 类型转换为 JNI 中的 jstring 类型const char *str = (*env)->GetStringUTFChars(env, stringValue, NULL);printf("Received string value in JNI: %s\n", str);(*env)->ReleaseStringUTFChars(env, stringValue, str);// 将 Java 中的 int[] 类型转换为 JNI 中的 jintArray 类型jint *arrayElements = (*env)->GetIntArrayElements(env, intArray, NULL);jsize length = (*env)->GetArrayLength(env, intArray);printf("Received int array values in JNI: ");for (int i = 0; i < length; i++) {printf("%d ", arrayElements[i]);}printf("\n");(*env)->ReleaseIntArrayElements(env, intArray, arrayElements, 0);
}