2011-08-10 13 views
1

対アドレスやあみんなはちょうどいじりIMと私は仕事にこれを取得カント:オブジェクトの比較:コンテンツ

public static void main(String[] args){ 
    Scanner input = new Scanner (System.in); 
    String x = "hey"; 
    System.out.println("What is x?: "); 
    x = input.nextLine(); 
    System.out.println(x); 
    if (x == "hello") 
     System.out.println("hello"); 
    else 
     System.out.println("goodbye"); 
} 

もちろん、あなたがハロー入力したが、それがない場合はハローハロー印刷するようになっています。私はちょうど混乱のためにEclipseを使用しています。少し速い助けてください

答えて

5

if (x.equals("hello"))する必要があります。

Javaオブジェクトの場合は、参照の比較に==が使用されます。価値比較のための.equals()

+0

これは私がスキャナでこれを行う必要はありません奇妙です。これはEclipse固有のものですか?多分疑わしい質問... – Josh

+2

これは "奇妙な"ではありません、それは物事がJavaで行われる方法です。これはEclipseとは関係ありません; – Jacob

+5

またはnull-safe: '' hello ".equals(x)' – pmnt

1

x == "hello"は値ではなく参照を比較するので、x.equals( "hello")を実行する必要があります。

1
String s = "something", t = "maybe something else"; 
    if (s == t)  // Legal, but usually WRONG. 
    if (s.equals(t)) // RIGHT 
    if (s > t) // ILLEGAL 
    if (s.compareTo(t) > 0) // CORRECT> 
2

that.Because文字列class.Soあるようにあなたは、そのコンテンツの利用が

if (x.equals("hello")) 
     System.out.println("hello"); 
    else 
     System.out.println("goodbye"); 
1

決してそれはないハンドルヌルないので逆。

3

==を使用しないでください。非基本型と同等かどうかをテストする場合は、参照均等のためにをテストします。代わりに.equals(..)を使用してください。次の図で

ルック:

equals vs ==

equalsを使用しているとき、あなたはそれらの内容を比較している、あなたはボックスのアドレスを比較している==を使用している場合。

+0

1000ワードの価値がある画像 – Nipuna

1

==演算子は、参照の等価性(値ではない)をチェックします。あなたの場合、2つのString型のオブジェクトがあり、それらは異なる参照を持ち、同じ値の "hello"を持っています。 Stringクラスには、値が等しいかどうかをチェックするequalsメソッドがあります。構文はif(str1.equals(str2))です。

1

比較としてこれを試してみてください:

if (x.equals("hello")) 
0

は、このサンプル・プログラムを取る:

public class StringComparison { 
    public static void main(String[] args) { 
     String hello = "hello"; 
     System.out.println(hello == "hello"); 

     String hello2 = "hel" + "lo"; 
     System.out.println(hello == hello2); 

     String hello3 = new String(hello); 
     System.out.println(hello == hello3); 
     System.out.println(hello3.equals(hello)); 
    } 
} 

その出力は次のようになります。

true 
true 
false 
true 

オブジェクトhellohello3が理由です別の参照を持っていますhello == hello3はfalseですが、contしたがって、equalsはtrueを返します。

Javaコンパイラが2つの文字列定数の連結を実行するのに十分スマートなので、式hello == hello2が真です。

Stringオブジェクトを比較するには、equalsメソッドを使用する必要があります。

関連する問題