Java 测试android:文本根据是否被修改产生不同的结果

Java 测试android:文本根据是否被修改产生不同的结果,java,android,gettext,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);

我在代码中遇到了这种情况,我不知道为什么。基本上,我在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

TextView计算=(TextView)findViewById(R.id.edit_text);
返回值(计算getText()=“0”);//假的
----
calc.setText(“0”);
返回值(计算getText()=“0”);//真的
为什么会发生这种情况?如何检查calc.getText()是否为0?

您从不将对象(
String
CharSequence
的子类,它是
Object
的子类,我建议使用它们而不是
CharSequence
)与
=
进行比较,因为这样比较的是引用,而不是实际的对象内容。所有对象都有一个
equals()
方法,但是字符串明确地对其进行了自定义(重写),以实现对要比较的字符串是否相同的检查

而是执行
calc.getText().toString().equals(“0”)

因此,就其发生的原因而言——Android生成一个对象,然后当您指定“0”时,您创建另一个对象。使用
equals()