最近学习java碰到了Int和Integer的问题,总结如下:
效率:
- Int比Integer效率高! Int是基本数据类型,Integer是封装类的对象,计算机读取和计算肯定是Int更快,对于Integer的读取和计算会相对复杂,包括int[]和Integer[]的对比!
int[]
在数组结构中直接存储在array data中,也就是相邻的4字节数字,每次访问直接读取数字即可;Integer[]
在array data中存储的是Integer
对象实例;每次访问时先找到Integer
实例,再去取里面的值。
对比:
public class Meth{ public static void main(String[] args) { int intA = 200; Integer intB = 200; Meth meth = new Meth(); System.out.println(meth.is_eq(intA, intB));//true System.out.println(intA);//200 System.out.println(intB);//200 System.out.println(intB.getClass().getName());//java.lang.Integer System.out.println(intB == intA);//true } boolean is_eq(int first, int second){ if (first == second){ return true; } return false; } }
- int和integer比较 == : true; 因为java会装箱和拆箱,在实例化的时候装箱,将int封装成integer,在进行计算和比较的时候会自动拆箱;
- integer的存储原理: integer会将 -127 到 127 的数字缓存,当integer实例化的值大于127的时候,会实例化一个对象;如:
Integer num = 128;
这时候等于new Integer(128);
- integer和integer比较 == :
-
- 如果实例化的数值小于127,大于-127
return true;
- 如果不在 -127 到 127 之间
return false;
原因见上条,因为2个都是对象,所以比较的内存地址,两个对象,两个不同的地址,所以不相等!
- 如果实例化的数值小于127,大于-127
补充:
- Java中 == 和equals(): == 比较地址, equals()只比较内容!