java - operator == 包装类对象的不同行为

标签 java comparison integer equality

任何人都可以向我解释输出中发生了什么。 如果 == 用于比较两个 ref。变量它只是检查它的引用是否相同然后它进入if body,那到底为什么 如果创建静态方法 valueOf() 和 ee==ff 不相等(这没问题)如果使用 new 关键字创建其对象,则 aa==bb 相等?

static void main(String args[])
{
    Integer aa = Integer.valueOf("12");
    Integer bb = Integer.valueOf("12");
    if(aa==bb)System.out.println("aa==bb");
    if(aa!=bb)System.out.println("aa!=bb");
    Integer ee = new Integer("12");
    Integer ff = new Integer("12");


    if(ee==ff)System.out.println("ee==ff");
    if(ee!=ff)System.out.println("ee!=ff");
}

输出:

aa==bb

ee!=ff

最佳答案

== 比较器检查对象是否相等!

由于 Integer.valueOf 维护了一个缓存的整数对象,其值为 -128 到 127 valueOf(String) 返回缓存的对象,因此 == 比较结果为真。

Integer a1 = new Integer("12");
Integer b1 = new Integer("12");
//a1 == b1 returns false because they point to two different Integer objects

Integer aa = Integer.valueOf("12");
Integer bb = Integer.valueOf("12");
//aa == bb returns true because they point to same cached object

对于对象值的比较总是使用 .equals 方法,对于像 int、long 等基本类型,你可以使用 == 比较器。

关于java - operator == 包装类对象的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12871110/

相关文章:

java - 精度损失 - Java

两个相关的java类中的java.lang.NullPointerException

java - 1772 加勒比在线判断超时错误。请帮我找出为什么我的算法花了这么长时间

java - 获取Android LRUCache当前使用的内存

java - 启用 SAXParser qName 来处理空格

php - 比价网站如何匹配同类产品

MySQL 查询以检查这是否是同一产品

php - 将标量值(从复选框)转换为 bool 值

c++ - 在 C 中使用 32 位整数的未使用内存

c++ - 为什么这个函数调用不明确?