在如下情况下,需要在本地方法中应用java对象的引用,就会用到类型之间的转换:
1)java方法里面将参数传入本地方法;
2)在本地方法里面创建java对象;
3)在本地方法里面return结果给java程序。
分为如下两种情况:
一、Java原始类型
像booleans、integers、floats等从Java程序中传到本地方法中的原始类型可以直接使用,下面是java中的原始类型和本地方法中的类型的对应:
Java类型 本地类型 字节(bit)
boolean jboolean 8, unsigned
byte jbyte 8
char jchar 16, unsigned
short jshort 16
int jint 32
long jlong 64
float jfloat 32
double jdouble 64
void void n/a
也就是说如果我在方法中传进去了一个boolean的参数的话,那么我在本地方法中就有jboolean类型与之对应。同理,如果在本地方法中return一个jint的话,那么在java中就返回一个int类型。
二、Java对象
Java对象做为引用被传递到本地方法中,所有这些Java对象的引用都有一个共同的父类型jobject(相当于java中的Object类是所有类的父类一样)。下面是JNI实现的一些jobject的子类:
本地方法中访问java程序中的内容
1) 访问String对象:
从java程序中传过去的String对象在本地方法中对应的是jstring类型,jstring类型和c中的char*不同,所以如果你直接当做char*使用的话,就会出错。因此在使用之前需要将jstring转换成为c/c++中的char*,这里使用JNIEnv的方法转换。下面是一个例子:
代码3:
JNIEXPORT jstring JNICALL Java_Prompt_getLine
(JNIEnv *env, jo