Integer i01 = 59;
Integer i01 = 59; 反编译后的结果是 Integer i01 = Integer.Valueof(59); (要求 jdk1.5 及以上)
int i02 = 59;
int i02 = 59; i02 就是一个简单的数。
Integer i03 = Integer.Valueof(59);
Integer.Valueof(i); 当 i 的取值在 -128-127 之间时,返回的是缓存中的Integer 对象。否则,返回的是一个新的 Integer 对象。
Integer i04 = new Integer(59);
new Integer(59); 是调用了构造函数,将 59 这个值赋值给 Integer 的局部变量value
Integer类型的i01 和 int类型的i02比较
Integer 类型的i01 和 int 类型的i02进行“ == ”比较的时候,反编译过来就是 i01.Valueof() == i02,这两个动作分别为 自动装箱 和 自动拆箱,这个特性是在 jdk1.5 之后才有的。
Integer i01 = 59; 等价于
Integer i03 = Integer.valueof(59);
原因:Integer i01 = 59; 反编译后就是 Integer i01 = Integer.valueof(59);
i01 和 i03 是同一个对象。
int i02 = 59; 就是一个简单的数
这个数据存放在 栈内存
中
int 是值,没有地址,在使用 == 进行比较时,只比较值。
当两个引用使用 == 进行比较的时候,比较的是地址。