如果 GetStringUTFChars 返回副本,是否应该调用 ReleaseStringUTFChars?

2023-12-09

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 if isCopy是真的。

但这本书Java 本机接口:程序员指南和规范(备用链接:http://192.9.162.55/docs/books/jni/html/objtypes.html#5161) says:

ReleaseString-Chars 调用是 GetStringChars 是否有必要 将 *isCopy 设置为 JNI_TRUE 或 JNI_FALSE。 ReleaseStringChars 要么释放 复制或取消固定实例,具体取决于 根据 GetStringChars 是否有 是否返回副本。

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


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果 GetStringUTFChars 返回副本,是否应该调用 ReleaseStringUTFChars? 的相关文章

随机推荐