【问题标题】:JNI native method returning a jboolean that is neither JNI_FALSE nor JNI_TRUEJNI 本机方法返回既不是 JNI_FALSE 也不是 JNI_TRUE 的 jboolean
【发布时间】:2013-11-28 09:53:08
【问题描述】:

如果应该返回布尔值(原生类型 jboolean)的 JNI 本机函数返回的值既不是 JNI_FALSE (0) 也不是 JNI_TRUE (1),是否定义了 Java 应如何解释该值?

对于两个不同版本的 Java,我在从执行如下操作的本机函数返回后观察到一些奇怪的情况:

JNIEXPORT jboolean JNICALL
Java_Class_function(JNIEnv* env, jobject obj)
{
    return 2;
}

【问题讨论】:

  • 有什么问题?通常 false 为 0,而 true 为其他任何值。

标签: java java-native-interface boolean


【解决方案1】:

这是未定义的行为。不要这样做。

【讨论】:

  • 详细说明:Java 可以将表达式计算为(val == 1),或(val != 0),或(val | 1),或((val << 3) | 8)... 或者直到很久以后才计算它。在唯一可能的返回值是 JNI_FALSE 和 JNI_TRUE 的假设下,允许对 JVM 进行优化,因此如果本机函数传回其他任何值,则可能会发生坏事。
  • @david (val | 1) 没有意义,而 norr 与转变有关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-29
  • 2023-03-02
  • 2014-02-14
  • 2023-03-11
  • 2013-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多