0

可能重复:
Java String.equals 与 ==
两个字符串的比较在 android 中不起作用

我有一个字符串数组,其中包含我试图与输入到编辑文本字段中的文本进行比较的值。然而,尽管 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();         
    }
4

4 回答 4

3

您不能使用==...进行字符串比较,您需要使用String.equals()

if (answer.equals(guess))
{
  ...
于 2012-07-06T03:37:50.247 回答
3

我建议你不要使用==,最好使用equals().

于 2012-07-06T03:38:08.110 回答
3

Strings的==运算符检查引用是否相等,这就是它不适合您的原因。

利用contentEquals()

这些String.contentEquals()方法只比较内容(字符序列),而不检查另一个对象是否也是String.

或者,如果您确定这两个是字符串,则使用 equals()

String.equals() 不仅比较字符串的内容,还检查其他对象是否也是字符串的实例。

于 2012-07-06T03:38:59.263 回答
1

您不能使用 '==' 来比较字符串

您还可以使用比较:

            if(username.compareTo(name) == 0) // if string matches

            {
            // add the code

            }

javadoc

public int compareTo(String anotherString)

按字典顺序比较两个字符串。比较基于字符串中每个字符的 Unicode 值。此 String 对象表示的字符序列按字典顺序与参数字符串表示的字符序列进行比较。如果此 String 对象按字典顺序位于参数字符串之前,则结果为负整数。如果此 String 对象按字典顺序跟随参数字符串,则结果为正整数。如果字符串相等,则结果为零;当 equals(Object) 方法返回 true 时,compareTo 返回 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。

于 2012-07-06T03:54:18.680 回答