6

Javaプログラミングを始めたばかりです。今のところ気に入っていますが、しばらくこの問題に悩まされていました。

このコードを実行すると、「boy」と入力するたびに次のように応答しGIRLます。

import java.util.Scanner;

public class ifstatementgirlorboy {
    public static void main(String args[]) {
        System.out.println("Are you a boy or a girl?");
        Scanner input = new Scanner(System.in);
        String gender = input.nextLine();

        if(gender=="boy") { 
            System.out.println("BOY");
        } 
        else { 
            System.out.println("GIRL"); 
        }
    }
}

なんで?

4

7 に答える 7

28

演算子ではなく、関数を使用しString.equals(String otherString)て文字列を比較します==

これは、==演算子がオブジェクト参照のみを比較するのに対し、String.equals()メソッドは両方Stringの値、つまりそれぞれを構成する文字のシーケンスを比較するためStringです。

String のソース コードからの equals() メソッド:

        public boolean equals(Object anObject) {
1013        if (this == anObject) {
1014            return true;
1015        }
1016        if (anObject instanceof String) {
1017            String anotherString = (String)anObject;
1018            int n = count;
1019            if (n == anotherString.count) {
1020                char v1[] = value;
1021                char v2[] = anotherString.value;
1022                int i = offset;
1023                int j = anotherString.offset;
1024                while (n-- != 0) {
1025                    if (v1[i++] != v2[j++])
1026                        return false;
1027                }
1028                return true;
1029            }
1030        }
1031        return false;
1032    }

だからあなたは書くべきです

if(gender.equals("boy")){

}

または大文字と小文字を区別せずに比較する

if(gender.equalsIgnoreCase("boy")){

}

そしてヌル安全のために

if("boy".equals(gender)){

}

今後の参考:

String s1 = "Hello";              // String literal
String s2 = "Hello";              // String literal
String s3 = s1;                   // same reference
String s4 = new String("Hello");  // String object
String s5 = new String("Hello");  // String object

ここ s1 == s2 == s3 but s4 != s5

一方

anyOfAbove.equals(anyOtherOfAbove); //true

于 2013-07-03T08:31:16.180 に答える
7

type のオブジェクトを比較するときは、 operator の代わりに methodStringを使用する必要があります。 オブジェクトの値を比較しながら、それらがメモリ内の同じオブジェクトであるかどうかを確認します。equals==equalsString==

したがって、代わりに:

if(gender=="boy") 

使用する

if(gender.equals("boy"))
于 2013-07-03T08:32:31.027 に答える
1
String a,b;

a==b;

ここで、両方の文字列オブジェクトの参照 (アドレス) が比較されます

a.equals(b);

ここで両方の文字列の内容が比較されます

于 2013-07-03T08:35:29.347 に答える
1

equalsの代わりに使用==

if("boy".equals(gender)){

}

値を比較するには equalsを使用します。while==は比較オブジェクト参照です。

于 2013-07-03T08:32:36.773 に答える
0

Javaでそのような文字列を比較することはできません。使用する必要があります

if (gender.equals("boy"))

それが機能するために。あなたのやり方は、コンテンツではなくオブジェクトを比較することです

于 2013-07-03T08:32:03.743 に答える
0

そこで参照等価性を使用しています。==文字通り2つの参照を比較しています。つまり、それらは同じオブジェクトですか。

equals()(この場合) 2 つの文字列の内容を比較するメソッドを使用する必要があります。詳細については、こちらを参照してください。

于 2013-07-03T08:32:26.123 に答える