Integer使用注意点

【强制】所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较

对于 Integer var = ? 在-128 至 127 范围内的赋值,Integer 对象是在IntegerCache.cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,推荐使用 equals 方法进行判断.

来自–《阿里巴巴 Java 开发手册》

		Integer a = 1;
		Integer b = 1;
		System.out.println(a == b);
		System.out.println(a.equals(b));
		System.out.println("----------------");
		
		Integer a1 = new Integer(100);
		Integer b1 = new Integer(100);
		System.out.println(a1 == b1);
		System.out.println(a1.equals(b1));
		System.out.println("----------------");
		
		Integer a2 = -128;
		Integer b2 = -128;
		System.out.println(a2 == b2);
		System.out.println(a2.equals(b2));
		System.out.println("----------------");
		
		Integer a3 = 129;
		Integer b3 = 129;
		System.out.println(a3 == b3);
		System.out.println(a3.equals(b3));

结果如下:

true
true
----------------
false
true
----------------
true
true
----------------
false
true

说明:

第一段和第三段代码中Integer中-128~127之间的数都是由IntegerCache.cache产生,当创建一个对象以后,如果下一个创建的对象值相等,会直接复用已有对象,此时使用==比较的话,会直接返回true

第二段代码是new对象,会产生两个新对象,虽然值相同,但是它们所指向的地址是不同的,使用==比较,返回false

第四段代码是由于129超出了Integer的值的范围,此时会在堆上产生新的对象,不会再去复用已有的对象,此时使用==比较,返回false

发布了74 篇原创文章 · 获赞 12 · 访问量 8234

猜你喜欢

转载自blog.csdn.net/cao1315020626/article/details/95241351
今日推荐