2

これは非常に単純に思えますが、ここで数時間立ち往生しています。

Java で 2 つの文字列を比較しなければならない場合、疑問があります。

私がこのようなことをするだけなら:

String var1 = "hello";
String var2 = "hello";

これら 2 つの単語を別の関数で比較すると、結果は明らかに true になります。

しかし問題は、入力から来る 2 つの単語を比較しなければならない場合です。これが私のコードです:

import java.util.Scanner;

public class Compare{

public static void main(String[] args){
    Scanner Scanner = new Scanner (System.in);

    System.out.println("Enter first word: ");
    String var1 = Scanner.nextLine();

    System.out.println("Enter second word: ");
    String var2 = Scanner.nextLine();

    if (same (var1, var2))
        System.out.println("Yes");
    else
        System.out.println("No");
}

public static boolean same (String var1, String var2){
    if (var1 == var2)
        return true;        
    else
        return false;
}


}

何度か試しましたが (明らかに同じ単語を入力しました)、結果は常に False です。

なぜこれが起こるのかわかりません。私は何が欠けていますか?

Java は初めてです。どんな種類の助けにも感謝します。ありがとう

4

6 に答える 6

4

あなたは変わるべきです

if (var1 == var2)
{
    return true;        
}
else
{
    return false;
}

if (var1.equals(var2))
{
    return true;        
}
else
{
    return false;
}

2つの違いについては、この回答を参照してください

于 2012-09-02T01:21:56.923 に答える
2

Java では、==は参照等価演算子です。

以下で動作します。

String var1 = "hello";
String var2 = "hello";
boolean cmp = var1 == var2;

これらは文字列リテラルであり、文字列テーブル内の同じ場所に割り当てられているため、両方の変数が同じ文字列を指しているからです。

別のソースからデータをフェッチする場合、文字列は動的に割り当てられるため、 を使用する必要がありますvar1.equals(var2)(2 つのオブジェクトを比較するときは、常にそれを使用する必要があります)。

于 2012-09-02T01:24:39.603 に答える
2

より正確に言えば、Java の文字列では、文字列がインターンされている場合、.equals の代わりに == を使用できる場合があります。== は、オブジェクトの内容ではなく、常にオブジェクト参照を比較することに注意してください。文字列をインターンすると、同じオブジェクト参照が返されます。これが、インターンされた文字列で == が機能する理由です。

これをより明確に理解するには、こちらの Javadoc をお読みください。

String.intern()

于 2012-09-02T01:38:51.560 に答える
1
var1 == var2

VMがメモリ最適化のために両方の変数を同じメモリに割り当て、したがって同じ参照を持つため、機能する場合があります。常にそうであるとは限らないので、使用することをお勧めします

var1.equals(var2)

それらの値を比較したいが、参照を気にしない場合。

于 2012-09-03T07:19:56.433 に答える
1

if (same (var1, var2))使用する代わりにif (v1.equals(v2))。2 つの を比較するために新しいメソッドを作成する必要はありませんString。それequals()がそうです。

==String各オブジェクトの内容ではなく、参照を比較するために使用されます。

于 2012-09-02T01:23:28.317 に答える
1

等価演算子 (==) は、最初に文字列の参照をチェックしてから、文字列の値をチェックします。While equals メソッドは最初に値をチェックします。したがって、この場合、等価演算子の代わりに equals メソッドを使用する必要があります。 String s="hello"; String s1="hello"; String s3=new String("hello") 上記のコード スニペットでは、使用If(s==s1){System.out.print("Equal");}すると equal.But と出力されますが、チェックIf(s==s3){System.out.print("unqual");}すると不均等とは出力されません。したがって、文字列 s と s3 が等しい場合でも、出力が間違っていることがわかります。したがって、このシナリオでは、問題のプログラムのような

Equals メソッドを使用する必要があります。

于 2012-09-03T09:25:59.570 に答える