Java基础 关于Integer的自动装箱/拆箱机制与Integer类的部分特性
本文引用了知乎ID “技术小黑屋” [https://zhuanlan.zhihu.com/p/25130481]
自动装箱/拆箱的概念
指的是Java会自动将基本数据类型转换为相应的对象,例如int转Integer,反之为拆箱,即Integer转int类型,java是面向对象开发的语音,所以当一个值包装为一个类的时候会更便于我们去操作它;我们看到装箱拆箱的操作时编译期间自动完成的,装箱是调用了Integer.valueOf()方法,拆箱则是调用了Integer.intValue()方法
关于Integer类的自动装箱的优缺点
Java自动装箱的优点:对-128到127的Integer对象进行缓存,当创建新的Integer对象时,如果符合这个这个范围,并且已有存在的相同值的对象,则返回这个对象(地址),不需要再创建一个新的Integer对象,否则创建新的Integer对象
Java自动装箱的缺点:因为自动装箱会隐式地创建对象,像前面提到的那样,如果在一个循环体中,会创建无用的中间对象,这样会增加GC压力,拉低程序的性能。所以在写循环时一定要注意代码,避免引入不必要的自动装箱操作
例子
如何来只管的看到这个区别呢,如下:
Integer a = 200;
Integer b = 200;
Integer c = 100;
Integer d = 100;
System.out.println(a == b);
System.out.println(c == d);
这题主要考核的就是对于Java的Integer类的特性和"= ="的原理
这题的答案为’false’和’true’
"= =“可以用于原始值进行比较,也可以用于对象进行比较,当用于对象与对象之间比较时,比较的不是对象代表的值,而是检查两个对象是否是同一对象,这个比较过程中没有自动装箱发生。进行对象值比较不应该使用”==“,而应该使用对象对应的equals方法。
且Integer的取值范围是-128~127
所以Integer值在这个范围区间的,java会进行自动装箱,将其归为同一个对象,官方给出的解释是-128~127之间为常用数字,所以直接封箱,当值不在这个范围的时候,为不同对象,所以在进行”= ="比较以后,得到的结果为false。