因为Java语言与C/C++语言数据类型的不匹配,须要单独定义一系列的数据类型转换关系来完成二者之间的对等(或者说是映射)。下面给出jni与Java数据类型对应表(jni类型均被定义在jni.h头文件中),以下表1和表2,在jni函数中,须要使用如下jni类型来等价与Java语言对应的类型。java
java的基本类型能够直接与C/C++的基本类型映射在jin.h头文件中有以下定义:数组
# include /* C99 */
typedef uint8_t jboolean; /* unsigned 8 bits */
typedef int8_t jbyte; /* signed 8 bits */
typedef uint16_t jchar; /* unsigned 16 bits */
typedef int16_t jshort; /* signed 16 bits */
typedef int32_t jint; /* signed 32 bits */
typedef int64_t jlong; /* signed 64 bits */
typedef float jfloat; /* 32-bit IEEE 754 */
typedef double jdouble; /* 64-bit IEEE 754 */
#else
typedef unsigned char jboolean; /* unsigned 8 bits */
typedef signed char jbyte; /* signed 8 bits */
typedef unsigned short jchar; /* unsigned 16 bits */
typedef short jshort; /* signed 16 bits */
typedef int jint; /* signed 32 bits */
typedef long long jlong; /* signed 64 bits */
typedef float jfloat; /* 32-bit IEEE 754 */
typedef double jdouble; /* 64-bit IEEE 754 */
#endif
Java 和JNI基本类型对照表
java的基本类型能够直接与C/C++的基本类型映射数据结构
Java与JNI引用类型对照表
与Java基本类型不一样,引用类型对开发人员是不透明的。Java内部数据结构并不直接向原生代码开放。也就是说 C/C++代码并不能直接访问Java代码的字段和方法函数
引用类型以及关系ui
数据类型描述符
1. 什么是数据类型描述符
在JVM虚拟机中,存储数据类型的名称时,是使用指定的描述符来存储,而不是咱们习惯的 int,float 等。3d
2. 对照表
3. 示例
3.1 例如咱们要表示一个 String 类code
Java 类型:java.lang.String
JNI 描述符:Ljava/lang/String;
即一个 Java 类对应的描述符,就是 L 加上类的全名,其中 . 要换成 / ,最后 不要忘掉末尾的分号。blog
3.2 假如咱们想要表示数组的话开发
Java 类型:String[]
JNI 描述符:[Ljava/lang/String;
Java 类型:int[][]
JNI 描述符:[[I
数组就是简单的在类型描述符前加 [ 便可,二维数组就是两个 [ ,以此类推。虚拟机
3.3 方法
Java 方法:long f (int n, String s, int[] arr);
JNI 描述符:(ILjava/lang/String;[I)J
Java 方法:void f ();
JNI 描述符:()V
括号内是每一个参数的类型符,括号外就是返回值的类型符。