Integer128==128?false

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38361347/article/details/81916620

Integer 与 int 数值比较?

		
		Integer b1 = 100;
		Integer b2 = 100;
		
		Integer c1 = 1501;
		Integer c2 = 1501;
		
			if(b1==b2) {
				System.out.println("相等");//相等
			}else {
				System.out.println("不相等");
				
			}
		
			
			if(c1==c2) {
				System.out.println("相等");
			}else {
				System.out.println("不相等");//不相等
				
			}

乍一看结果是相等的,其实不然。

1,Integer 和 Integer 100 相比较是相等?

2,Integer 和 Integer 127以上 相比较是相等?

答案:

相等

不相等

为什么会这样子?原因是什么?我是不是学了假的Java?

通过查看Integer源代码发现?

你会发现Integer类内部 通过静态内部类提供了一个缓存池,范围在-128~127之间,如果超过这个范围 Integer 值都是new出来的对象,比较的话肯定会出错!

疑问?为什么这么写Integer源码?

Integer缓存了-128~127之间的数,这是在类加载期间就完成的。以后需要的时候直接指向它就可以了,省去了构造对象的开支,提高了效率。

只能采用equals 比较!

查看源码Integer equals方法你会发现

所以

或者

同理Long也是一样

猜你喜欢

转载自blog.csdn.net/weixin_38361347/article/details/81916620
128