如果GetStringUTFChars返回副本,您应该调用ReleaseStringUTFChars吗?

时间:2011-05-02 16:28:49

标签: java java-native-interface

Rob Gordon的“Essential JNI:Java Native Interface”一书包含以下代码示例,用于将jstring转换为C字符串:

const char* utf_string;
jboolean isCopy;
utf_string = env->GetStringUTFChars(str, &isCopy);
/* ... use string ... */
if (isCopy == JNI_TRUE) {
    env->ReleaseStringUTFChars(str, utf_string);
}

请注意,如果ReleaseStringUTFChars为真,则只会调用isCopy

但是这本书Java Native Interface: Programmer's Guide and Specification(替代链接:http://192.9.162.55/docs/books/jni/html/objtypes.html#5161)说:

  

ReleaseString-Chars调用是   GetStringChars是否有必要   将* isCopy设置为JNI_TRUE或JNI_FALSE。   ReleaseStringChars要么释放了   复制或取消实例,取决于   关于GetStringChars是否有   还是没有回复。

我认为这是戈登书中的错误是正确的吗?

1 个答案:

答案 0 :(得分:59)

是的,您的假设是正确的(您应该始终调用ReleaseStringUTFChars)。