1、基本区别。
① int是Integer的基本类型,Integer是int的包装类型。
② Integer变量需要实例化后才能使用,且默认值为null;int不需实例化,默认值为0。
③ Integer实例化是指针指向此对象,int直接存储数据的值。
2、容易混淆的区别。
① new生成的是两个对象,其内存地址不同。
Integer i = new Integer(100);
Integer j = new Integer(100);
System.out.print(i == j); //false
② Integer i=100即Integer i = Integer.valueOf(100),在源码中对于-128~127的数字会被缓存,在此区间的变量值相等。
Integer i = 100;
Integer j = 100;
System.out.print(i == j); //true
扫描二维码关注公众号,回复:
2647369 查看本文章
③ 不在-128~127区间的变量需新建Integer对象,即和第五种情况相似,其内存地址不同。
Integer i = 200;
Integer j = 200;
System.out.print(i == j); //false
④ Integer和int比较时,java会将Integer自动拆包装为int然后进行比较,实际即为两个int变量的比较。
Integer i = new Integer(200);
int j = 200;
System.out.print(i == j); //true
⑤ new Integer()生成的变量指向堆中新建的对象,不是new生成的Integer变量指向的是Java常量池中的对象,其内存地址不同。
Integer i = new Integer(100);
Integer j = 100;
System.out.print(i == j); //false
请各位多加指教。