当在C和Java之间传递数字时,应该知道它们彼此之间的对应类型。
例如,C也有int和long的数据类型,但是它们的实现却是取决于平台的。在一些平台上,int类型是16位的,在另外一些平台上是32位的。
然而,在Java平台上int类型总是32位的整数。基于这个原因,Java本地接口定义了jint、jlong等类型。
Java数据类型和C数据类型的对应关系
Java | C | 字节 |
---|---|---|
boolean | jboolean | 1 |
byte | jbyte | 1 |
char | jchar | 2 |
short | jshort | 2 |
int | jint | 4 |
long | jlong | 8 |
float | jfloat | 4 |
double | jdouble | 8 |
在头文件jni.h中,这些类型被typedef
语句声明为在目标平台上等价的类型。
该头文件还定义了常量JNI_FALSE = 0和JNI_TRUE = 1。
返回Java基本类型¶
Java的8种基本类型: char,byte,short,int,long,float,double,boolean
下面简单演示返回8种基本类型的方法。
新建BaseParam.java
与baseparam.cpp
文件。分别实现native方法与c方法。
模块名字为fisher-pole
。
char¶
extern "C"
JNIEXPORT jchar JNICALL
Java_com_rustfisher_fishpole_worker_BaseParam_nChar(JNIEnv *env, jobject thiz) {
return 'a';
}
返回char a
byte¶
extern "C"
JNIEXPORT jbyte JNICALL
Java_com_rustfisher_fishpole_worker_BaseParam_nByte(JNIEnv *env, jobject thiz) {
unsigned char abc = 99;
return abc;
}
返回byte 99
short¶
extern "C"
JNIEXPORT jshort JNICALL
Java_com_rustfisher_fishpole_worker_BaseParam_nShort(JNIEnv *env, jobject thiz) {
short s = 128;
return s;
}
返回short 128
int¶
extern "C"
JNIEXPORT jint JNICALL
Java_com_rustfisher_fishpole_worker_BaseParam_nInt(JNIEnv *env, jobject thiz) {
return 42;
}
返回int 42
long¶
extern "C"
JNIEXPORT jlong JNICALL
Java_com_rustfisher_fishpole_worker_BaseParam_nLong(JNIEnv *env, jobject thiz) {
long res = 123456789;
return res;
}
float¶
extern "C"
JNIEXPORT jfloat JNICALL
Java_com_rustfisher_fishpole_worker_BaseParam_nFloat(JNIEnv *env, jobject thiz) {
return 3.14159F;
}
double¶
extern "C"
JNIEXPORT jdouble JNICALL
Java_com_rustfisher_fishpole_worker_BaseParam_nDouble(JNIEnv *env, jobject thiz) {
return 3.141592658;
}
boolean¶
extern "C"
JNIEXPORT jboolean JNICALL
Java_com_rustfisher_fishpole_worker_BaseParam_nBool(JNIEnv *env, jobject thiz) {
return JNI_FALSE;
}
返回boolean false
本站说明
一起在知识的海洋里呛水吧。广告内容与本站无关。如果喜欢本站内容,欢迎投喂作者,谢谢支持服务器。如有疑问和建议,欢迎在下方评论~