jni+java数据类型映射_JNI系列(四)JAVA数据类型和JNI类型对照表

因为Java语言与C/C++语言数据类型的不匹配,须要单独定义一系列的数据类型转换关系来完成二者之间的对等(或者说是映射)。下面给出jni与Java数据类型对应表(jni类型均被定义在jni.h头文件中),以下表1和表2,在jni函数中,须要使用如下jni类型来等价与Java语言对应的类型。java

27a86f2a13d9e9103cfc17ab565d0fd8.png

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++的基本类型映射数据结构

838221638c7c7075e537057af048972a.png

Java与JNI引用类型对照表

与Java基本类型不一样,引用类型对开发人员是不透明的。Java内部数据结构并不直接向原生代码开放。也就是说 C/C++代码并不能直接访问Java代码的字段和方法函数

4f7f243b860f6101d85c9de319ba00a9.png

引用类型以及关系ui

5942735e1db9170088f41c1ffabb7e75.png

数据类型描述符

1. 什么是数据类型描述符

在JVM虚拟机中,存储数据类型的名称时,是使用指定的描述符来存储,而不是咱们习惯的 int,float 等。3d

2. 对照表

b8cfe1ad952ef0bdb4880c26f0ead4bc.png

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

括号内是每一个参数的类型符,括号外就是返回值的类型符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值