可能重复:
Java String.equals versus ==
comparison of two Strings doesn't work in android
我有一个字符串数组,其中包含我要与输入到edittext字段的文本进行比较的值。尽管edittext和数组中的值都是相同的,但我的if(answer == guess)永远不会解析为true。
我通过Toast消息进行调试,它显示答案和猜测都是一样的。请有人帮忙吗?代码如下:
final EditText et;
et = (EditText) findViewById(R.id.editText1);
String guess = et.getText().toString();
String answer = LinesFromFile[LineNumber];
if (answer == guess)
{
Toast msg = Toast.makeText(getBaseContext(), answer + " " + guess + " right", Toast.LENGTH_LONG);
msg.show();
}
else
{
Toast msg = Toast.makeText(getBaseContext(), answer + " " + guess + " wrong", Toast.LENGTH_LONG);
msg.show();
}
答案 0 :(得分:3)
您无法使用==
进行字符串比较...您需要使用String.equals()
if (answer.equals(guess))
{
...
答案 1 :(得分:3)
我建议您不要使用==
,最好使用equals()
。
答案 2 :(得分:3)
字符串的==
运算符检查引用是否相等,这就是它不适合你的原因。
使用contentEquals()
String.contentEquals()
方法仅比较内容(字符序列),不检查另一个对象是否也是String
的实例。
或者,如果你确定这两个是字符串,那么使用equals()
String.equals()不仅比较String的内容,还检查另一个对象是否也是String的实例。
答案 3 :(得分:1)
您不能使用'=='来比较字符串
您也可以使用比较:
if(username.compareTo(name) == 0) // if string matches
{
// add the code
}
来自javadoc:
public int compareTo(String anotherString)
按字典顺序比较两个字符串。比较基于字符串中每个字符的Unicode值。此String对象表示的字符序列按字典顺序与参数字符串表示的字符序列进行比较。如果此String对象按字典顺序位于参数字符串之前,则结果为负整数。如果此String对象按字典顺序跟随参数字符串,则结果为正整数。如果字符串相等,结果为零; compareTall在equals(Object)方法返回true时完全返回0。
这是词典排序的定义。如果两个字符串不同,则它们在某个索引处具有不同的字符,这两个字符串是两个字符串的有效索引,或者它们的长度不同,或两者都有。如果它们在一个或多个索引位置具有不同的字符,则令k为最小的索引;然后,通过使用<来确定位置k处的字符具有较小值的字符串。运算符,按字典顺序排在另一个字符串之前。在这种情况下,compareTo返回两个字符串中位置k处两个字符值的差值 - 即值:
this.charAt(k)-anotherString.charAt(k)
如果没有它们不同的索引位置,那么较短的字符串按字典顺序排在较长的字符串之前。在这种情况下,compareTo返回字符串长度的差异 - 即值:
this.length()-anotherString.length()
指定者:
compareTo in interface Comparable<String>
参数:
anotherString - 要比较的字符串。
返回:
如果参数字符串等于此字符串,则值为0;如果此字符串按字典顺序小于字符串参数,则小于0的值;如果此字符串按字典顺序大于字符串参数,则值大于0.