关于整型包装类值的比较

所有整型包装类对象值的比较必须使用equals方法。

/****************自动装箱的方式创建Integer  begin******************/
Integer a1 =3;

Integer a2 =3;

System.out.println(a1 == a2); // true

System.out.println(a1.equals(a2)); // true


Integer b1 =128;

Integer b2 =128;

System.out.println(b1 == b2); // false

System.out.println(b1.equals(b2)); // false
/****************自动装箱的方式创建Integer   end******************/


Integer c1 =new Integer(3);

Integer c2 =new Integer(3);

System.out.println(c1 == c2); // false

System.out.println(c1.equals(c2)); // true

Integer d1 =new Integer(128);

Integer d2 =new Integer(128);

System.out.println(d1 == d2); // false

System.out.println(d1.equals(d2)); // true

当使用自动装箱方式创建一个Integer对象时,当数值在-128 ~127时,会将创建的 Integer 对象缓存起来,当下次再出现该数值时,直接从缓存中取出对应的Integer对象。所以上述代码中,a1和a2引用的是相同的Integer对象,此时 a1==a2是相同的地址进行比较,返回true
而b1和b2虽然也是通过自动装箱的方式创建,但由于数值为128不在-128~127之间,因此该值不会被缓存,每次都会创建一个新的Integer对象;所以==判断为false,equals判断为true


补充:

== : 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象(基本数据类型==比较的是值,引用数据类型==比较的是内存地址)。
equals() : 它的作用也是判断两个对象是否相等。但它一般有两种使用情况:

  • 情况 1:类没有覆盖 equals() 方法。则通过 equals() 比较该类的两个对象时,等价于通过“==”比较这两个对象。
  • 情况 2:类覆盖了 equals() 方法。一般,我们都覆盖 equals() 方法来比较两个对象的内容是否相等;若它们的内容相等,则返回 true (即,认为这两个对象相等)。\color{red}{equals 方法被覆盖过, hashCode 方法也必须被覆盖}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容