-
基本数据类型:
- 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);
}