关于Integer的==小发现(非常好玩和易错)

Integer n=new Integer(222);
Integer p=new Integer(222);
 System.out.println(n==222);

输出:true

这段代码没有疑问,因为发生了转型,n转为了int。

Integer n=new Integer(222);
Integer p=new Integer(222);
 System.out.println(n==p);

输出:false

这里需要需要注意了,n和p是不同对象,=比较的是内存地址所以输出false。

Integer n=new Integer(122);
Integer p=new Integer(122);
 System.out.println(n==p);

输出:false

这里为什么输出false,话说不是-128到127都用的缓存吗,对一半,另一半是new的时候不用缓存,只有在字面量赋值的时候才用缓存,和String有点像不是吗?看下面用字面量赋值:

Integer n=122;
Integer p=122;
 System.out.println(n==p);

输出:true

是不是很好玩啊~~~~

posted @ 2019-07-25 13:11  pc_m  阅读(200)  评论(0编辑  收藏  举报