java中为啥Integer和String的“==”判断方式不一样

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中为啥Integer和String的“==”判断方式不一样相关的知识,希望对你有一定的参考价值。

1 为什么
Integer a=1000;Integer b=1000;a==b却返回false?
2 为什么
String a="a";String b="a";a==b却返回true?

1。Integer是包装类,a和b都是类的引用,自然的内存首地址不同。
2。String是工具类。但是,你赋值的时候,没用构造方法,而是在字符串常量池中把"a"赋值给a,"a"赋值给b,当然就相等了。
参考技术A String 的生成SUN公司作过优化。标准的实例化方式应该是 String a = new String("a"); 如果你用标准写法,还是会返回false的。
而用简化的实例化形式 String a = "a"; 会先搜索堆中是否有相同对象,有的话不建立,直接将变量指向这个对象,这样就会有String b = "a";时 b==a的情况。因为b和a 是同一个对象。
参考技术B integer是对象,不可以直接这样比较,需要转换成int然后在比较,
用a.intValue()==b.intValue()这样比较试一试的呢。本回答被提问者采纳
参考技术C 对象不同。int是简化的类型,特别的类。 参考技术D 2 为什么
String a="a";String b="a";a==b却返回true? 这个比较是不可取的.比较字符串,需要使用EQUALS.

以上是关于java中为啥Integer和String的“==”判断方式不一样的主要内容,如果未能解决你的问题,请参考以下文章

java中Integer类的对象转成object类,但是为啥tostring输出的是数字不是地址

java里面既然可以用int定义整形变量,为啥还要用Integer,求大神详细解答

在java Web项目中 数据库中的主键类型integer类型那么实体类中应该用啥类型或最好用啥类型?为啥?

为啥 == 与 Integer.valueOf(String) 的比较对 127 和 128 给出不同的结果?

为啥字符串连接比 String.valueOf 将 Integer 转换为 String 更快?

为啥 (Integer) 222 != (Integer) 222 在 Java 中? [复制]