0

私は次のコードを試しています:

import java.util.Stack;
public class HelloWorld{

 public static void main(String []args){
    Stack s=new Stack();
    s.push(5-4);
    s.push(9);
    s.push(51);
    if(s.get(1).equals("9"))
        System.out.println("yes its comparable");
    System.out.println(s.get(1));

 }
}

実際の出力は次のとおりです。

9

出力は次のようになると思います。

yes its comparable
9

私はそれを理解することができません。s.get(1)=="9" も試しましたが、うまくいきません。この背後にある鍵は何でしょうか? どちらも文字列ではありませんか?または1つは文字列で、1つはオブジェクトですが、それでも同等です。誰でもこれについて教えてもらえますか?

4

5 に答える 5

7

9は整数です。"9"は文字列です。

s.get(1).equals("9"); // false
s.get(1).equals(9); // true
于 2013-08-16T11:49:15.953 に答える
3
  if(s.get(1).equals("9"))
  System.out.println("yes its comparable");  //This prints when if condition datisfied
  System.out.println(s.get(1)); // This is run always

必ず括弧を使用してください

 if(condition){
    // if satisfied condition execute this 

   }

あなたが期待している以下のコードだと思います

    if(s.get(1).equals(9)) // use int value not String 
        {
            System.out.println("yes its comparable");
            System.out.println(s.get(1));
        }
于 2013-08-16T11:51:15.003 に答える
3

9は でありInteger"9"ですString

したがって、それらは等しくありません。

于 2013-08-16T11:49:23.103 に答える
3

Stringと の 2 つの異なるタイプを比較していますInteger。で参照型を使用すると、Stackこの混乱を防ぐことができます

Stack<Integer> s=new Stack<Integer>();

raw タイプの使用

Stack s=new Stack();

オブジェクト型が使用されるようになるため、たとえば次の場合

s.push(5-4);

呼び出されると、Integer型に自動ボックス化されます。それから式

s.get(1).equals("9"))

メソッドが比較を行う前に型をチェックすると、 に評価さfalseれますequals

if (obj instanceof Integer) {
   return value == ((Integer)obj).intValue();
}
return false;
于 2013-08-16T11:50:43.547 に答える