0

私は自分のコードでこれを経験していますが、その理由がわかりません。基本的に、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であるかどうかを確認するにはどうすればよいですか?

4

1 に答える 1

2

オブジェクト(StringのサブクラスでCharSequenceありObject、の代わりにそれらを使用することをお勧めしますCharSequence)を==、と比較することは決してありません。これは、実際のオブジェクトコンテンツではなく、参照を比較するためです。すべてのオブジェクトにはequals()メソッドがありますが、文字列はそれを明確にカスタマイズ(オーバーライド)して、比較する文字列が同じであるかどうかのチェックを実装します。

代わりにcalc.getText().toString().equals ("0");

つまり、なぜそれが起こっているのかという点で、Androidは1つのオブジェクトを作成し、「0」を指定すると別のオブジェクトを作成します。を使用equals()すると、最初にコンテンツがチェックされてから結果(true / false)が得られるため、これが解決されます。

于 2012-12-29T23:14:59.177 に答える