传递给Java的Jstring与预期的不同

时间:2017-04-17 15:00:10

标签: java c eclipse java-native-interface

我有一个从.c文件传递到java程序的字符串。该函数如下所示:

JNIEXPORT jstring JNICALL Java_MyJNI_getName(JNIEnv *env, jobject thisObj) {
return (*env)->NewStringUTF(env, "Name");

}

然而,在我的单元测试中,它说“名称”不是返回的内容。

/**
 * test to see if name is retrieved properly
 */
@Test
public void getNameTest1(){
    MyJNI m = new MyJNI();
    assertSame(m.getName(), "Name");
}

此测试提供此错误消息:

java.lang.AssertionError: expected same: <Name> was not:<Name>

所以我不明白它的区别。我猜这是与空字符或换行符有关,但我无法弄明白。

1 个答案:

答案 0 :(得分:1)

assertSame(expected, actual)检查对象是否相同 实例(根据==运算符)。你得到了断言 错误,因为您比较了String的2个不同实例, 虽然两者内容相同。

你可能想检查两个字符串是否相等(根据 equals方法)。为此,您需要使用

assertEquals(m.getName(), "Name");