Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:字符串等于且包含不匹配项_Java_Android_String - Fatal编程技术网

Java Android:字符串等于且包含不匹配项

Java Android:字符串等于且包含不匹配项,java,android,string,Java,Android,String,我正在测试Android应用程序的JSON功能,并有以下JSON对象 {"result":"fail"} 然后,我使用以下代码获取我的值: JSONObject jObject = new JSONObject(ReturnValue); //Return value is what's shown above String r = jObject.getString("result"); 然后使用下面的方法,我没有找到匹配项 if(r.trim() == "fail") 我把它写在屏幕上

我正在测试Android应用程序的JSON功能,并有以下JSON对象

{"result":"fail"}
然后,我使用以下代码获取我的值:

JSONObject jObject = new JSONObject(ReturnValue); //Return value is what's shown above
String r = jObject.getString("result");
然后使用下面的方法,我没有找到匹配项

if(r.trim() == "fail")
我把它写在屏幕上只是为了确保:

et.setText("-" + r + "-");
这会导致失败-

我不明白为什么这不匹配。如果我使用r.Contains,它将返回true,但我不能将其用于检查。

使用

if(r.trim().equals("fail"))

比较字符串。

使用equals
.equals
而不是
=
。这是因为在Java中,如果使用
==
,则会相互比较对象指针。在
String
的源代码中,它们重写了
equals
方法,因此它们会比较字母

在Java中不能重写运算符


此外,这也是一般性的,如果您不想检查正在比较的引用是否实际指向堆中的同一对象,请始终使用
equals
进行任何对象比较。

正如其他人指出的,在Java中==表示“完全相同的对象”,而不是“相同的对象”。例如,您可以有两个相同的SimpleDataFormat对象,但是如果它们在堆上占据不同的位置,它们就不是同一个对象。仅供参考,C#的行为方式非常相似,但成功地对程序员隐藏了它


顺便说一句,既然您已经在编写Java代码,那么您知道,稍微研究一下该语言可能是个好主意。以后省去了很多麻烦。对于那些试图用Java编写C#(如非静态内部类)的人来说,还有很多其他的惊喜等待着他们。

使用
equals
方法进行比较,而不是
=
。谢谢,如果你把它作为一个答案,我会把它标记为接受。不用担心,伙计,你可以接受下面的一个。干杯,谢谢你的解释。来自C#它们在语法上非常接近,我有时只是假设某些东西会起作用。事实上,C#也有一个类似于字符串的gotcha,equals和==。只是它藏得更深。嗯。。。奇怪的我能得到一些关于反对票的反馈吗?非静态内部类对于C++/C#的人来说是一个大难题,他们懒得去读Java(并在实际应用中导致内存泄漏),我对equals vs==的解释非常准确。。。该链接提供了更多信息。那么-只是出于好奇-为什么?