装箱拆箱的要点
- 自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动地转换成对应的对象或者反过来。
- 自动装箱时编译器调用valueOf将原始类型值转换成对象,同时自动拆箱时,编译器通过调用类似intValue(),doubleValue()这类的方法将对象转换成原始类型值。
自动装箱的一下注意
- 自动装箱的一个问题是,如果在一个很长的循环中进行自动装箱的操作就会产生非洲多的无用对象,会降低程序的性能并且加重了垃圾回收的工作量.
- 当重载遇上自动装箱时,不会发生自动装箱操作.
- "=="可以用于原始值进行比较,也可以用于对象进行比较,当用于对象与对象之间比较时,比较的不是对象代表的值,而是检查两个对象是否是同一对象,这个比较过程中没有自动装箱发生。进行对象值比较不应该使用”==“,而应该使用对象对应的equals方法.
Integer num1 = 1; // 自动装箱
int num2 = 1;
System.out.println(num1 == num2); // true
Integer obj1 = 1; // 自动装箱,调用Integer.valueOf()方法
Integer obj2 = 1; // 自动装箱,调用Integer.valueOf()方法
System.out.println(obj1 == obj2); // true
Integer one = new Integer(1);
Integer anotherOne = new Integer(1);
// one 和 anotherOn 为不同对象
System.out.println(one == anotherOne); // false
System.out.println(one.equals(anotherOne)); //true
- 另一个需要避免的问题就是混乱使用对象和原始数据值,一个具体的例子就是当我们在一个原始数据值与一个对象进行比较时,如果这个对象没有进行初始化或者为null,就会抛出NullPointerException.
网友评论