简单的if else语句不起作用

时间:2011-03-16 21:12:21

标签: java android if-statement

我有一个简单的密码保护。我是这样做的:

EditText editText1 =  (EditText) findViewById(R.id.editText1);
String Password = editText1.getText().toString();
if(Password == "a"){
  Toast.makeText(getApplicationContext(), "Success" + Password, Toast.LENGTH_SHORT).show();
} else {
  Toast.makeText(getApplicationContext(), "Failure" + Password, Toast.LENGTH_SHORT).show();
}

我有edittext和按钮。如果用户输入“a”,吐司应该说成功。但它总是说失败。我不明白我的代码有什么问题...

5 个答案:

答案 0 :(得分:17)

在Java中,对非原始表达式使用==将始终比较对象引用。你问的是Password是否指的是与字符串文字“a”完全相同的对象。

使用:

if (Password.equals("a"))

if ("a".equals(Password))

这些将调用String.equals(Object)覆盖,它确定两个引用是否引用相等的字符串对象 - 即相同的逻辑字符序列。

如果Password为空,前者将抛出异常;后者不会。不要将此视为始终使用后一种形式的建议 - 如果Password 不应该为空,那么异常可能比继续处于意外状态更好。

我还建议您与变量名称保持一致 - 通常局部变量是camelCased,因此您使用password代替Password

答案 1 :(得分:5)

您需要使用等于方法。不是==用于比较字符串。所以,你应该这样做 -

if( Password.equals("a") )
{
    // ....
}    

string::equals reference

答案 2 :(得分:2)

试试这个:

if(Password.equals("a"))
{ 
...
}

答案 3 :(得分:0)

==进行引用检查,即检查两个字符串在物理上是否与内存中的对象相同。它们可能是(因为Java优化了一些字符串,所以它们是),但你永远不应该依赖它。

equals()检查字符串是否有意义相等,即具有相同的字符,这几乎是你想要的100%的时间。

答案 4 :(得分:0)

在Java中......

Object comparison --> x.equals(y)
reference comparison --> x == y