因为Integer类型最多可以比价127/-128之间的数,所以需要换方法或者进行转换(127可以比较)
Integer i = 128;
Integer j = 128;
Integer x = 126;
Integer y = 126;
System.out.println(i == j);
System.out.println(x == y);
System.out.println(i.equals(j));
System.out.println(x.equals(y));
System.out.println(i.intValue() == j.intValue());
System.out.println(x.intValue() == y.intValue())
注:后面是最近补充的
最近喜欢看java源码,看到Integer又想起之前写的这个,我们可以来看看为什么==比较大小会出错
首先就是,==号比较的是指针指向的地址以及数据是否相同,也就是说==号如果比较两个地址不相同的数据的话,就会返回false,我们可以看看它的源码,当我们new一个新的Integer的时候,后台会先进入valueOf这个方法进行判断,当这个值大于等于最小值并且小于等于最大值的时候,后台会在常量池中查找是否有,如果有就直接返回,如果没有那么就会新建一个然后返回
当值不满足这两个条件的时候,也就是当值小于low:-128 或者 值大于 high:127的时候(high可以从上面那张图发现最大值为127),会直接new一个新的对象并且返回,那么两个128比较就相当于new了两次,也就是说它的地址是完全发生了改变,所以会返回false
我们可以看看如果Integer大于128的时候返回的地址是什么,相不相同
可以看到,当两个常量为128的时候地址是不一样的,而当两个常量为127的时候地址是相同的