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