JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其余语言的通讯(主要是C&C++)java
一旦使用JNI,JAVA程序就丧失了JAVA平台的两个优势:数组
在Java存在两种数据类型:基本类型和引用类型(primitive types 和reference types)
在JNI中也一样存在相似类型的映射安全
Java类型 | 本地C类型(NativeType) | 实际表示的c类型 | 说明 |
---|---|---|---|
boolean | jboolean | unsigned char | |
byte | jbyte | signed char | |
char | jchar | unsigned char | |
short | jshort | unsigned short | |
int | jint | long | 有符号,32 位 |
long | jlong | __int64 | 有符号,64 位 |
float | jfloat | float | |
double | jdouble | double | |
void | void | N/A |
Java类型 | 本地C类型(NativeType) | 说明 |
---|---|---|
Object | jobject | Class类对象 |
String | jstring | 字符串对象 |
Object[] | jobjectArray | 对象数组 |
boolean[] | jbooleanArray | 布尔类型数组 |
byte[] | jbyteArray | |
char[] | jcharArray | 字符型数组 |
short[] | jshortArray | |
int[] | jintArray | |
long[] | jlongArray | 长整型数组 |
float[] | jfloatArray | |
double[] | jdoubleArray | 双精度浮点型数组 |
是类的完整名称(包名+类名),将原来的 . 分隔符换成 / 分隔符。
如在java代码中的java.lang.String类的类描述符就是java/lang/String函数
Java语言类型 | 域描述符 |
---|---|
boolean | Z |
byte | B |
char | C |
short | S |
int | I |
long | J(?为何不是L) |
float | F |
double | D |
通常引用类型则为 L + 该类型类描述符 + “;” 。学习
例如:String类型的域描述符为 Ljava/lang/String;.net
对于数组,其为 : [ + 其类型的域描述符 + ;对象
int[ ] 其描述符为[Iblog
float[ ] 其描述符为[F开发
String[ ] 其描述符为[Ljava/lang/String;字符串
Object[ ]类型的域描述符为[Ljava/lang/Object;
多维数组则是 n个[ +该类型的域描述符 , N表明的是几维数组。例如:
int [ ][ ] 其描述符为[[I
float[ ][ ] 其描述符为[[F