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

为什么==在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

TA贡献1840条经验 获得超5个赞

使用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
?
心有法竹

TA贡献1866条经验 获得超5个赞

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


所以代替:


if(gender=="boy") 

使用


if(gender.equals("boy"))


查看完整回答
反对 回复 2019-12-06
  • 3 回答
  • 0 关注
  • 625 浏览

添加回答

举报

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