为什么==在String上不起作用?

我刚刚开始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"); 

        }

    }

}

为什么?


莫回无
浏览 626回答 3
3回答

慕斯709654

使用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 literalString s2 = "Hello";              // String literalString s3 = s1;                   // same referenceString s4 = new String("Hello");  // String objectString s5 = new String("Hello");  // String object这里 s1 == s2 == s3 but s4 != s5在哪里anyOfAbove.equals(anyOtherOfAbove); //true

心有法竹

比较类型的对象时String,应使用equals方法而不是operator ==。 equals将比较String对象的值,同时==检查它们是否与内存中的对象相同。所以代替:if(gender=="boy") 使用if(gender.equals("boy"))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java