[JNI]截断jboolean类型
程序员文章站
2024-02-26 22:45:40
...
jboolean是一个8位的unsigned类型,值范围为0~255.0对应JNI_FALSE,1~255对应JNI_TRUE.
对于32位或16位的变量a赋值给jboolean时,如果a的低8位为0会出现逻辑问题.
代码:
void print(jboolean condition)
{
if (condition) {
printf("true\n");
} else {
printf("false\n");
}
}
//错误
int n = 256;
print (n); //==>JNI_FALSE
对于32位变量n(256的低8位为0),本应该判断为JNI_TRUE,实际判断为JNI_FLASE.
改为如下后逻辑正确:
//正确
int n = 256;
print(n ? JNI_TRUE : JNI_FALSE);
参考资料:
[1]The Java™ Native Interface Programmer’s Guide and Specification.pdf