stackoverflow.com/questions/5859673表示无论是否复制字符串,都必须调用ReleaseStringUTFChars()
。那么jboolean *isCopy
中的参数GetStringUTFChars()
有什么用呢?
当原始jstring超出范围时,我可以释放C字符串吗?例如,在这个伪代码中:
static const char *cstr;
JNIEXPORT void JNICALL Java_com_Run(JNIEnv *e, jobject obj, jstring s) {
cstr = (*e)->GetStringUTFChars(e, s, 0);
}
void cfunc() {
// Can I use and release the cstr here? How?
}
根据文档,我必须通过NewGlobalRef()
获取引用,如果我想在JNI调用结束后使用java对象,则稍后发布。此规则对通过GetStringUTFChars()
检索的字符串有效吗?
答案 0 :(得分:1)
isCopy
的 GetStringUTFChars()
参数只是尝试提供与其他类似JNI函数一致的签名。在所有已知的JVM实现中,它总是 JNI_TRUE
,因为Java字符串在内部以不兼容的UCS-16格式存储。
但是,如果不知道上下文,就无法释放cstr
。