Integer对象用== 和equals比较大小的问题

Integer对象用== 和equals比较大小

先看以下代码:

Integer i1 = 127;
Integer i2 = 127;

if (i1 == i2) {
System.out.println("i1 == i2 (==)");
} else {
System.out.println("i1 != i2 (==)");
}

Integer i3 = 128;
Integer i4 = 128;
if (i3 == i4) {
System.out.println("i3 == i4 (==)");
} else {
System.out.println("i3 != i4 (==)");
}
if (i3.equals(i4)) {
System.out.println("i3 == i4 (equals)");
} else {
System.out.println("i3 != i4 (equals)");
}

结果:

i1 == i2 (==)
i3 == i4 (==)
i3 == i4 (equals)

结果分析:java “==”就是比较引用
  而由于-128至127内的Interger都是同一个对象引用,所以第一个比较式true 
  之外的Interger 则不是同一个对象,所以比较为false

  equals()是重载的方法,所以如果用equals来比较都为true

时间: 2024-10-09 10:27:52

Integer对象用== 和equals比较大小的问题的相关文章

Integer对象大小比较问题

一.问题 先来看一看例子 public class IntegerTest { public static void main(String[] args) throws Exception { Integer a1 = 127; Integer b1 = Integer.valueOf(127); System.out.println("1:"+(a1 == b1)); Integer a2 = 127; Integer b2 = 127; System.out.println(&q

java中基本类型封装对象所占内存的大小(转)

这是一个程序,java中没有现成的sizeof的实现,原因主要是java中的基本数据类型的大小都是固定的,所以看上去没有必要用sizeof这个关键字. 实现的想法是这样的:java.lang.Runtime类中有一些简单的能涉及到内存管理的函数: Every Java application has a single instance of class Runtime that allows the application to interface with the environment in

两个值相同的Integer对象的比较

package com.jj.test; import java.util.Objects; public class ObjectEqualsTest { public static final Integer COUNT_NONE = 0; public static void main(String[] args){ Integer a=new Integer(0); boolean bool = Objects.equals(a,COUNT_NONE); a.equals(COUNT_N

JAVA中Integer对象的引用

JAVA中没有指针一说,但也有引用的概念.这里要说的主要是Integer是不是同一个对象. 1.先看一段代码: public static void main(String[] args){ Integer a1 = 100; Integer b1 = a1;//另一种也可以b1=100 Field field = null; try { field = a1.getClass().getDeclaredField("value"); } catch (NoSuchFieldExcep

关于Integer对象比较,和int基本类型比较的一些问题

public class Test { public static void main(String[] args) { Integer j = 192; int i = 192; System.out.println(new Integer(12) == new Integer(12));//false对象比较.///必然不同 System.out.println(new Integer(192) == i);//true自动拆箱 System.out.println(j == i);//tr

JAVA正确地自定义比较对象---如何重写equals方法和hashCode方法

在实际应用中经常会比较两个对象是否相等,比如下面的Address类,它有两个属性:String province 和 String city. public class Address { private String province; private String city; public String getProvince() { return province; } public void setProvince(String province) { this.province = p

再谈包装类Integer对象的比较

public class CompareDemo { public static void main(String[] args) { int a = 128, b = 128; System.out.println(a == b); // true Integer c = 128, d = 128; System.out.println(c == d); // false System.out.println(c.equals(d)); // true Integer e = -128, f

java开发----自定义对象,重写equals方法

javaweb开发中,用到了好多自定义对象,这时候如果不重写equals方法,很多时候都会返回false, 因此我们必须习惯重写这个方法. 重点: 1.equals比较俩对象时比较的是对象引用是否指向同一地址 2.重写后比较的是俩者value是否相等 3.在重写的同时也要将hashcode方法重写--------至于为什么,在某个地方看到有人将此比作名字和身份证,感觉很恰当.(点击查看原因) 扩展: equals比较八大包装对象 (如Float,Double,Integer,Date,Point

【原创】关于java对象需要重写equals方法,hashcode方法,toString方法 ,compareto()方法的说明

在项目开发中,我们都有这样的经历,就是在新增表时,会相应的增加java类,在java类中都存在常见的几个方法,包括:equals(),hashcode(),toString() ,compareto()这四个方法,对于刚刚接触java的初学者来说,对于这块可以没有更深入的了解,只是单纯意义上的复制粘贴,并没有很好的去了解.现在借用这个时间给大家说说这几个方法作用. equals: 比较两个对象相等时使用(需要配合Hashcode一起使用,在后边再进行详细解释)   hashcode: 重写has