2016-06-14 17 views
0

私は、作成中のこのAndroidアプリで取るべき行動を決定するボタンのテキストを比較しようとしています。私は理解できない予期せぬ動作をしています。Androidのテキストボタンの比較

clickMeButton.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      if (v.getId() == R.id.btnLeft) { 
       Button button = (Button) v; 
       String click = new String("Click me"); 
       String look = new String(button.getText().toString()); 
       Boolean check = new Boolean(look == click); 
       if (button.getText().toString() == "Click me") { 

変数チェックがfalseを返す。どうして?デバッガでは、両方の項目の横に「Click me」が表示されます。エミュレータでクリックしたボタンには「Click me」と表示され、元のテキストには「Click me」がXMLで指定されています。

答えて

5

これは、Javaで文字列の比較を行う方法ではありません。両方のパラメータが同じ値を持っている場合は、両方のパラメータがequals()チェックしながら、同じオブジェクトである場合は、この

if (button.getText().toString().equals("Click me")) { 

==チェックしてみてください。

1

文字列オブジェクトを文字列オブジェクトと比較すると、これは問題ありません。しかし、オブジェクトをchar配列と比較しています。オブジェクトは決してchar配列にはなりません。オブジェクトの値は等しいことができますが、オブジェクトの比較はfalseを返します。この2つの変数は同じではないためです。 文字列を比較するJavaのベストプラクティスは等しいメソッドです。

Boolean check = new Boolean(look == click); // DO NOT 
Boolean check = new Boolean(look.equals(click)); // DO 

if文と同じです。

if (button.getText().toString().equals(click)){..} 

編集:そして、ここでは良い説明 How do I compare strings in Java?

です
関連する問題