JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)
一旦使用JNI,JAVA程序就丧失了JAVA平台的两个优点:
在Java存在两种数据类型:基本类型和引用类型(primitive types 和reference types) 在JNI中也同样存在类似类型的映射
<table> <thead> <tr> <th>Java类型</th> <th>本地C类型(NativeType)</th> <th>实际表示的c类型</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>boolean</td> <td>jboolean</td> <td>unsigned char</td> <td> </td> </tr> <tr> <td>byte</td> <td>jbyte</td> <td>signed char</td> <td></td> </tr> <tr> <td>char</td> <td>jchar</td> <td>unsigned char</td> <td></td> </tr> <tr> <td>short</td> <td>jshort</td> <td>unsigned short</td> <td></td> </tr> <tr> <td>int</td> <td>jint</td> <td>long</td> <td>有符号,32 位</td> </tr> <tr> <td>long</td> <td>jlong</td> <td>__int64</td> <td>有符号,64 位</td> </tr> <tr> <td>float</td> <td>jfloat</td> <td>float</td> <td></td> </tr> <tr> <td>double</td> <td>jdouble</td> <td>double</td> <td></td> </tr> <tr> <td>void</td> <td>void</td> <td>N/A</td> <td></td> </tr> </tbody> </table>
<table> <thead> <tr> <th>Java类型</th> <th>本地C类型(NativeType)</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>Object</td> <td>jobject</td> <td>Class类对象</td> </tr> <tr> <td>String</td> <td>jstring</td> <td>字符串对象</td> </tr> <tr> <td>Object[]</td> <td>jobjectArray</td> <td>对象数组</td> </tr> <tr> <td>boolean[]</td> <td>jbooleanArray</td> <td>布尔类型数组</td> </tr> <tr> <td>byte[]</td> <td>jbyteArray</td> <td></td> </tr> <tr> <td>char[]</td> <td>jcharArray</td> <td>字符型数组</td> </tr> <tr> <td>short[]</td> <td>jshortArray</td> <td></td> </tr> <tr> <td>int[]</td> <td>jintArray</td> <td></td> </tr> <tr> <td>long[]</td> <td>jlongArray</td> <td>长整型数组</td> </tr> <tr> <td>float[]</td> <td>jfloatArray</td> <td></td> </tr> <tr> <td>double[]</td> <td>jdoubleArray</td> <td>双精度浮点型数组</td> </tr>
</tbody> </table>
是类的完整名称(包名+类名),将原来的 . 分隔符换成 / 分隔符。 如在java代码中的java.lang.String类的类描述符就是java/lang/String
<table>
<thead>
<tr>
<th>Java语言类型</th>
<th>域描述符</th>
</tr>
</thead>
<tbody>
<tr>
<th>boolean</th>
<th>Z</th>
</tr>
<tr>
<th>byte</th>
<th>B</th>
</tr>
<tr>
<th>char</th>
<th>C</th>
</tr>
<tr>
<th>short</th>
<th>S</th>
</tr>
<tr>
<th>int</th>
<th>I</th>
</tr>
<tr>
<th>long</th>
<th>J(?为什么不是L)</th>
</tr>
<tr>
<th>float</th>
<th>F</th>
</tr>
<tr>
<th>double</th>
<th>D</th>
</tr>
</tbody>
</table>