区别:
1.int 是一种基本数据类型 , Integer 是 int 的包装类
2.Integer 变量需要实例化, int 不需要
3.Integer 实际是对象的引用, 当 new 一个 Integer 时, 实际上是生成一个指针指向此对象; 而 int 则是直接存储数据值
4.Integer 的默认值是 null,int 的默认值是 0
值的对比:
1. 无论值是否相同, Integer 与 new Integer 都不会相等, 结果为 false.
情况一:
Integer 范围在 - 128-127 时, 指向专门存放他的内存 (常量池)
new Integer 引用指向堆
他们的内存地址不一样, 所以无论值是否相同, 作比较结果都为 false
情况二:
Integer 范围不在 - 128-127, 则编译的时候 Integer.valueOf(值) 本质返回的是 new Integer()
new Integer 引用指向堆
这样二者是两个不同的堆栈对象, 无论堆上的值是否相同, 引用地址不同, 结果为 false;
情况三:
两个 Integer 范围都不在 - 128-127 之间, 那么依然是两 new Integer 对象, 结果为 false
2. 两个都是非 new 出来的 Integer, 如果数在 - 128 到 127 之间, 值相同则是 true, 否则为 false
java 在编译 Integer 的时候, 被翻译成 -> Integer i = Integer.valueOf(值); 而 valueOf() 函数会对 - 128 到 127 之间的数进行缓存
3. 两个都是 new 出来的, 无论堆上的值是否相同, 引用地址不同, 结果为 false
4.int 和 integer(无论是 new 出来的还是 - 128-127 常量池中) 比, 值相同则是 true, 否则为 false, 因为 Integer 会自动拆箱为 int 再去比较
来源: http://www.bubuko.com/infodetail-3096894.html