JNI通过引用传递失败

时间:2012-02-17 03:21:38

标签: java c java-native-interface

我在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

2 个答案:

答案 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,因为你没有使用整数返回值。