我在Java中有以下代码:
class Foo {
public native int bar(String name);
public static void main(String[] args) {
Foo fo = new Foo();
String n = "Name1";
fo.(n);
System.out.println(n);
}
}
在C中我有:
JNIEXPORT jint JNICALL Java_com_ehsunbehravesh_j7_j7win_windows_Computer_getComputerName
(JNIEnv *env, jobject obj, jstring name) {
name = (*env)->NewStringUTF(env, "Name2");
return 0;
}
我认为屏幕上的结果应为Name2
,但它是Name1
答案 0 :(得分:0)
字符串是不可变的。为什么不回来呢?
public native String bar();
[..]
JNIEXPORT jstring JNICALL Java_com_ehsunbehravesh_j7_j7win_windows_Computer_getComputerName
(JNIEnv *env, jobject obj)
{
return (*env)->NewStringUTF(env, "Name2");
}
答案 1 :(得分:0)
在C代码中,name是一个局部变量。更改它不会更改它以前指向的字符串对象。另外,java String是不可变的,因此无法更改对象。你可以做的是将引用返回给一个新的String,因为你没有使用整数返回值。