Java JNI本机方法返回既不是JNI_FALSE也不是JNI_TRUE的jboolean
如果本应返回布尔值(本机类型jboolean)的JNI本机函数返回的值既不是JNI_FALSE(0),也不是JNI_TRUE(1),是否定义了Java应该如何解释该值 对于两个不同版本的Java,我观察到从本机函数返回后出现了一些奇怪的情况,该函数执行以下操作:Java JNI本机方法返回既不是JNI_FALSE也不是JNI_TRUE的jboolean,java,java-native-interface,boolean,Java,Java Native Interface,Boolean,如果本应返回布尔值(本机类型jboolean)的JNI本机函数返回的值既不是JNI_FALSE(0),也不是JNI_TRUE(1),是否定义了Java应该如何解释该值 对于两个不同版本的Java,我观察到从本机函数返回后出现了一些奇怪的情况,该函数执行以下操作: JNIEXPORT jboolean JNICALL Java_Class_function(JNIEnv* env, jobject obj) { return 2; } 这是未定义的行为。不要这样做。这是未定义的行为。不要
JNIEXPORT jboolean JNICALL
Java_Class_function(JNIEnv* env, jobject obj)
{
return 2;
}
这是未定义的行为。不要这样做。这是未定义的行为。不要这样做。有什么问题?通常false为0,true为其他值。问题是什么?典型的false是0,true是其他任何东西。详细说明:Java可以将表达式计算为
(val==1)
,或者作为(val!=0)
,或者作为(val@david(val|1)
(val@code>)没有意义,也没有使用移位进行计算。详细说明:Java可以将表达式计算为(val==1)
,或as(val!=0)
,或as(val | 1)
,或as((val@david(val | 1)
)没有意义,换档时也没有意义。