-2

重複の可能性:
Java で文字列を比較するにはどうすればよいですか?

「y」と書いてEnterキーを押しても、以下のプログラムが何も表示されない理由がよくわかりません。

import java.util.Scanner;

public class desmond {
    public static void main(String[] args){
        String test;
        System.out.println("welcome in our quiz, for continue write y and press enter");
        Scanner scan = new Scanner(System.in);
        test = scan.nextLine();
        if (test == "y") {
            System.out.println("1. question for you");
        }
    }
}
4

3 に答える 3

3

equals()文字列の比較に使用

お気に入り

test.equals("y")

さらに良い

"y".equals(test)
于 2012-11-27T18:29:02.897 に答える
2

equals(一般に) 文字列をJava で比較する必要があります。

if ("y".equals(test))
于 2012-11-27T18:29:10.070 に答える
1

== を使用して String を比較できますか? はい。常に 100% 動作しますか? いいえ。

Java でプログラミングを始めたときに最初に学んだことの 1 つは、決して == を使用して文字列を比較しないということでしたが、なぜでしょうか? 技術的な説明に行きましょう。

文字列はオブジェクトです。両方の文字列が同じオブジェクトを持つ場合、メソッド equals (Object) は true を返します。== 演算子は、両方の参照 String 参照が同じオブジェクトを指している場合にのみ true を返します。

文字列を作成すると、文字通り文字列のプールが作成されます。JVM 要求が既に文字列プールに同じ値の文字列が存在する場合、同じ値を持つ別の文字列リテラルを作成すると、変数が同じメモリアドレス。

このため、「==」を使用して変数「a」と「b」の等価性をテストすると、true が返される可能性があります。

例:

String a = "abc" / / string pool
String b = "abc"; / * already exists a string with the same content in the pool,
                                  go to the same reference in memory * /
String c = "dda" / / go to a new reference of memory as there is in pool

文字列を作成してメモリ内に新しいオブジェクトを作成し、変数 a と b の等価性を「==」でテストすると、false が返され、メモリ内の同じ場所を指しません。

String d = new String ("abc") / / Create a new object in memory

String a = "abc";
String b = "abc";
String c = "dda";
String d = new String ("abc");


a == b = true
a == c = false
a == d = false
a.equals (d) = true
于 2012-11-27T18:46:42.803 に答える