JNI接口学习(一)JNI数据类型

JNI 概述

JNI是Java代码和本地代码(C/C++等)双向通信的桥梁。Java可以通过此接口方法C里的函数,C可以通过此接口可以访问Java里的变量和类等。

在Android里,JNI运行在Dalvik VM里,具体关系图如下:


Java中两大数据类型及JNI对应:

  • 简单类型(Primitive types)
             简单数据类型有:

Java简单类型
JNI对应类型
有无符号
boolean
jboolean
unsigned
byte
jbyte
signed
char
jchar
unsigned
short
jshort
signed
int
jint
signed
long
jlong
signed
float
jfloat
double
jdouble
void
二进制位数
1
8
16
16
32
64
32
64
--
封装器类
Boolean
Byte
Character
Short
Integer
Long
Float
Double
Void

   简单类型在Java中都是传值操作。

简单类型在JNI中通常可以直接操作,因为它们在C/C++都有对应类型。

  • 引用类型(Reference Types)
引用类型主要是对象(类)和数组,类似于C里面的指针操作,但是没有指针的&,*,++等操作。

引用类型在赋值的时候,可以简单认为是把指针赋值下(实现上不一定是这样),并不会复制一份所引用的内容。所以如果有两个指向相同内容的引用,改变其中一个引用指向的内容,那么另外一个引用内容也相应改变,例如如下代码:

Point p = new Point(1.0, 2.0);
Point q = p;
System.out.println(p.x);  // Print out the X coordinate of p: 1.0
q.x = 13.0;               // Now change the X coordinate of q
System.out.println(p.x);  // Print out p.x again; this time it is 13.0

如果需要赋值时进行内容拷贝,则需要用到对象的clone方法,而且clone依赖于各个对象的具体实现,有可能没有进行内容拷贝。但是数组的clone方法是进行了拷贝。

引用类型作为函数参数时,按传引用方法。

引用类型直接比较时,并不是比较指向的内容,而是指针本身。若要进行内容的比较,需要用到equals方法,但也依赖于各对象equals方法的具体实现。

引用类型在JNI中操作需要一些预定义好的JNI函数辅助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值