Если собственная функция JNI, которая должна возвращать логическое значение (собственный тип jboolean), возвращает значение, которое не является ни JNI_FALSE (0), ни JNI_TRUE (1), определено ли, как Java должна интерпретировать значение?
С двумя разными версиями Java я наблюдал некоторые странные события после возврата из нативной функции, которая делает что-то вроде этого:
JNIEXPORT jboolean JNICALL
Java_Class_function(JNIEnv* env, jobject obj)
{
return 2;
}
(val == 1)
, или как(val != 0)
, или как(val | 1)
, или как((val << 3) | 8)
... или просто не оценивать его намного позже. JVM разрешено оптимизировать в предположении, что единственными возможными возвращаемыми значениями являются JNI_FALSE и JNI_TRUE, поэтому могут произойти плохие вещи, если нативная функция вернет что-то еще. 30.10.2014(val | 1)
не имеет смысла, как и тот, что со сдвигом. 28.04.2020