官方JNI API确实指定了是否从jstring
创建const char *
时进行复制。这是报价:
NewStringUTF
jstring NewStringUTF(JNIEnv *env, const char *bytes);
根据字符数组构造一个新的
java.lang.String
对象 修改后的UTF-8编码。
这是指const char *
的副本还是我自己strdup
的副本?
答案 0 :(得分:2)
NewStringUTF
在Java Heap中创建一个新的String对象。该字符串由Java Heap中的byte[]
或char[]
数组支持,并且不共享您传入的任何堆外数据。
因此,您不需要strdup
,无论如何内容将被复制(并可能转换为)到Java Heap。