在Java中比较两个字符串

Paw*_*nr1 7 java string android

可能重复:
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!");  
Run Code Online (Sandbox Code Playgroud)

关键是要检查"editText1"的内容是否等于"Sample Text"

Ósc*_*pez 26

在Java中,两个字符串(和一般,两个对象)必须使用相比较equals(),没有==.该==操作员检查身份(意思是:如果测试两个对象在内存中完全一样),而该方法equals()测试两个对象相等(意思是:如果测试两个对象具有相同的),不管他们是两个不同的对象.你几乎总是对平等感兴趣,而不是对身份感兴趣.

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

String str = ((EditText)findViewById(R.id.editText1)).getText().toString();
boolean correct = "SampleText".equals(str);
Run Code Online (Sandbox Code Playgroud)

另请注意,将字符串文字首先放入调用中是一种很好的做法equals(),这样在第二个字符串的情况下你就是安全的null,避免了可能的情况NullPointerException.

  • *"还要注意,在调用`equals()`时首先放置字符串文字是一个好习惯,这样你就可以安全地防止第二个字符串为空,避免可能的`NullPointerException`."*In强大的代码,这实际上是一个论证**反对**把文字放在第一位.如果您的逻辑在比较之前无法处理这种情况,大多数情况下,您需要**NPE,因此您可以在发布之前修复逻辑. (3认同)