测试android:text会产生不同的结果,具体取决于它是否已被修改

时间:2012-12-29 23:13:06

标签: java android gettext

我在我的代码上遇到这个问题,我无法弄清楚原因。基本上我在XML上将android:text设置为“0”,当用getText检查它是否为“0”时它返回false。如果我使用setText将其设置为0并再次检查它将返回true。

    <TextView android:id="@+id/edit_text"
        android:text="0" />

    TextView calc = (TextView) findViewById(R.id.edit_text);
    return( calc.getText() == "0" ); // false
    ----
    calc.setText( "0" );
    return( calc.getText() == "0" ); // true

为什么会这样?如何检查calc.getText()是否为0?

1 个答案:

答案 0 :(得分:2)

你从不比较对象(StringCharSequence的子类,它是Object的子类,我建议使用它们代替CharSequence==,因为它比较了引用,而不是实际的Object内容。所有对象都有一个equals()方法,但是Strings会自定义它(覆盖)以实现检查比较字符串是否相同。

取而代之的是calc.getText().toString().equals ("0");

因此,就其发生的原因而言 - 当您指定“0”时,Android会生成一个对象,您创建另一个对象。使用equals()解决了这个问题,因为它首先检查内容然后给出结果(true / false)。