取值问题
默认值 : int = 0 ,Integer = null
范围:两者均为 -231 ~ 231-1 (-2147483648 ~ 2147483647)
比较
相等
- int == int : 基本比较使用 ==
- int == Integer : Integer 默认会拆包成基础数据,对两者数值进行比较,但是Integer 如果为 null ,则会抛出NullPointerException
int a;Integer b;
a == b //throw NullPointerException
int a = 0;Integer b = 0
a == b // true
int a = 129;Integer b = 129
a == b // true
- Integer == Integer: 包装类比较,由于Integer的取值在-128 ~ 127之间,则直接从常量缓存池中获取数值,所以两个数值相等且在-128 ~ 127之间时返回true;但是不在这个范围,则会创建了新的Integer对象,所以两个对象是不相等的;包装类比较相等推荐采用equels,即
Integer a;Integer b;//null 比较
a == b //true
a.equals(b)//throw NullPointerException
Integer a = 1;Integer b = 1;
a == b // true
a.equals(b) // true
Integer a = 128;Integer b = 128;
a == b // false
a.equals(b) // true
大小
- int <-> int : 基本比较
- int <-> Integer: 使用基本比较 > 大于、< 小于 ,>= 大于等于 , <= 小于等于;
会将Integer拆包为int (为null时抛出NullPointerException)进行比较 - Integer<-> Integer
- 使用基本比较 > 大于、< 小于 ,>= 大于等于 , <= 小于等于; 会将两个Integer均拆包为int (为null时抛出NullPointerException)进行比较
- 使用compareTo , (其中一个为null时抛出NullPointerException);包装类比较推荐使用compareTo
/*
compareTo 具体实现逻辑 (x,y
x : 调用者的值
y : 传入比较者的值
调用者小于比较者 返回 -1
相等 返回 0
调用者大于比较者 返回 1
*/
public static int compare(int x, int y) {
return (x < y) ? -1 : ((x == y) ? 0 : 1);
}
Integer a = 129 ; Integer b = null;
a >= b //throw NullPointerException
a.compareTo(b) // throw NullPointerException
Integer a = 129 ; Integer b = -127
a > b //true
a.compareTo(b) // 1
a > b 等价于 (a.compareTo(b) == 1 或 a.compareTo(b) > 0)