NewStringUTF是否复制传入的const char *

时间:2019-05-21 16:25:41

标签: java c jvm java-native-interface

官方JNI API确实指定了是否从jstring创建const char *时进行复制。这是报价:

NewStringUTF
jstring NewStringUTF(JNIEnv *env, const char *bytes);
  

根据字符数组构造一个新的java.lang.String对象   修改后的UTF-8编码。

这是指const char *的副本还是我自己strdup的副本?

1 个答案:

答案 0 :(得分:2)

NewStringUTF在Java Heap中创建一个新的String对象。该字符串由Java Heap中的byte[]char[]数组支持,并且不共享您传入的任何堆外数据。

因此,您不需要strdup,无论如何内容将被复制(并可能转换为)到Java Heap。