我有一个简单的密码保护。我是这样做的:
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”,吐司应该说成功。但它总是说失败。我不明白我的代码有什么问题...
答案 0 :(得分:17)
在Java中,对非原始表达式使用==
将始终比较对象引用。你问的是Password
是否指的是与字符串文字“a”完全相同的对象。
使用:
if (Password.equals("a"))
或
if ("a".equals(Password))
这些将调用String.equals(Object)
覆盖,它确定两个引用是否引用相等的字符串对象 - 即相同的逻辑字符序列。
如果Password
为空,前者将抛出异常;后者不会。不要将此视为始终使用后一种形式的建议 - 如果Password
不应该为空,那么异常可能比继续处于意外状态更好。
我还建议您与变量名称保持一致 - 通常局部变量是camelCased,因此您使用password
代替Password
。
答案 1 :(得分:5)
答案 2 :(得分:2)
试试这个:
if(Password.equals("a"))
{
...
}
答案 3 :(得分:0)
==
进行引用检查,即检查两个字符串在物理上是否与内存中的对象相同。它们可能是(因为Java优化了一些字符串,所以它们是),但你永远不应该依赖它。
equals()
检查字符串是否有意义相等,即具有相同的字符,这几乎是你想要的100%的时间。
答案 4 :(得分:0)
在Java中......
Object comparison --> x.equals(y)
reference comparison --> x == y