7

可能重复:
Java String.equals 与 ==

我知道这是一个愚蠢的问题,但为什么这段代码不起作用。

boolean correct = "SampleText"  == ((EditText)findViewById(R.id.editText1)).getText().toString();
    if(correct) ((TextView)findViewById(R.id.textView1)).setText("correct!");
    else ((TextView)findViewById(R.id.textView1)).setText("uncorrect!");  

关键是检查“editText1”的内容是否等于“示例文本”

4

5 回答 5

26

在 Java 中,必须使用equals()而不是比较两个字符串(通常是两个对象) ====运算符测试身份(意思是:测试两个对象在内存中是否完全相同),而方法equals()测试两个对象是否相等(意思是:测试两个对象是否具有相同的),无论它们是否是两个不同的对象. 几乎总是你对平等感兴趣,而不是身份。

要修复您的代码,请执行以下操作:

String str = ((EditText)findViewById(R.id.editText1)).getText().toString();
boolean correct = "SampleText".equals(str);

另请注意,在对 的调用中将字符串文字放在第一位是一个好习惯,equals()这样在第二个字符串是 的情况下您是安全的null,避免了可能的NullPointerException.

于 2012-06-17T16:28:20.490 回答
1

在JavaStrings中必须与他们的equals()方法进行比较:

String foo = "foo";
String bar = "bar";
if (foo.equals(bar)) System.out.println("correct");
else System.out.println("incorrect");
于 2012-06-17T16:31:19.180 回答
1

在java中比较2个对象的正确方法是使用equals() method of Object class And,因为String是java中的一个对象,它应该以相同的方式进行比较。

比较字符串的正确方法是,

s1.equals(s2)

所以你可以使用这个,

boolean correct = "SampleText"。等于(((EditText)findViewById(R.id.editText1)).getText().toString());

于 2012-06-17T17:28:06.843 回答
1

要比较两个字符串的值(是否相等),您需要使用 equals,而不是 ==(如果您不关心大小写,请使用 equalsIgnoreCase)。
使用 equals 将检查字符串的内容/值(与“==”相反,它只会检查两个变量是否指向同一个对象 - 不是同一个值)。

于 2012-06-17T16:37:28.283 回答
0
((TextView)findViewById(R.id.textView1)).setText("SampleTest".equals(((EditText)findViewById(R.id.editText1)).getText().toString()) ? "correct!" : "incorrect!");

它有点长,可能有更好的方法可以做到这一点。.toString() 感觉很奇怪!

于 2012-06-17T16:33:43.260 回答