为了账号安全,请及时绑定邮箱和手机立即绑定

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

/ 猿问

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

莫回无 2019-12-06 12:43:43

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

        }

    }

}

为什么?


查看完整描述

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 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


查看完整回答
反对 回复 2019-12-06
?
慕前端131612

比较类型的对象时String,应使用equals方法而不是operator ==。 equals将比较String对象的值,同时==检查它们是否与内存中的对象相同。


所以代替:


if(gender=="boy") 

使用


if(gender.equals("boy"))


查看完整回答
反对 回复 2019-12-06
?
慕侠2389804

在Java中,字符串是对象(String)。包含对象的变量是引用。如果将两个对象与==运算符进行比较,true则仅当它们是相同的对象(在内存中)时才返回。但是在您的代码中却不"boys"是(动态地实例化String)。


但是,有一个方法String.equals(),它比较两个字符串,如果它们具有相同的字符且顺序相同,则返回true,如果它们是相同的对象,则不返回。


正确的代码在这里:


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.equals("boy")) {

            System.out.println("BOY");

        } 


        else {

            System.out.println("GIRL");

        }

    }

}

您还可以交换两个字符串(优点是可以防止NullPointerException在if时抛出该字符串gender == null):


"boy".equals(gender)

要忽略字母的大小写,请equalsIgnoreCase()改用。


查看完整回答
反对 回复 2019-12-06

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信