Integer 类型对象之间大小比较
一、new Integer
Integer i = new Integer(100);
Integer j = new Integer(100);
System.out.println(i == j);
false
Integer i = new Integer(100);
Integer j = new Integer(200);
System.out.println(i < j);
true
结论一:new创建新对象,"==",是比较是否有相同的引用,可以理解为地址,不同对象不一样的地址。 ">=","<=",">","<" 可以正常比较大小
二、使用Integer.valueOf() 创建的对象
Integer i = Integer.valueOf(100);
Integer j = Integer.valueOf(100);
System.out.println(i == j);
true
但是以下方式不行
Integer i = Integer.valueOf(400);
Integer j = Integer.valueOf(400);
System.out.println(i==j);
false
Integer i = Integer.valueOf(-129);
Integer j = Integer.valueOf(-129);
System.out.println(i == j);
false
Integer i = Integer.valueOf(-129);
Integer j = Integer.valueOf(-129);
System.out.println(i >= j);
true
结论二:使用public static Integer valueOf(int i),可以比较大小,但是仅限于 -128 ~ 127 。">=","<=",">","<" 可以正常比较大小
我们看看valueOf方法的声明
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
//其中
//static final int low = -128;
//static final int high = 127;
我们可知,在-128 ~ 127之间的数,是Integer包提前准备好的,放到常量池中,只要使用,就在常量池中找这些数,所以可以看做是引用相同,"=="比较可以取到true。如果超过这个范围,则会重新new一个对象,同结论一的结果,false。
三、使用自动装箱来对对象直接赋值
Integer i = 100;
Integer j = 100;
System.out.println(i == j);
true
Integer i = 200;
Integer j = 200;
System.out.println(i == j);
false
结论三:自动装箱,其实就是调用Integer.valueOf(),那么与结论二是相同的,同样,">=","<=",">","<" 可以正常比较大小
总结
">=","<=",">","<" 都是可以正常比较大小的,包装类对象不可使用“==”符做比较运算,如果要进行比较运算时,最好使用java类库中的compareTo方法,或者用.equals()来比较