黑马程序员——对一道论坛题目的思考

来源:互联网 发布:messageutil.java 编辑:程序博客网 时间:2024/05/01 23:27

                              ------- android培训java培训、期待与您交流! ----------

      在黑马论坛上看到这样一道题:判断最终结果是true还是false

 

代码片段1
Java
代码
public static void main(final String[] args) {
Integer a = new Integer(100);
Integer b = 100;
System.out.println(a == b);

代码片段2
Java
代码
public static void main(final String[] args) {
Integer a = 100;
Integer b = 100;
System.out.println(a == b);

代码片段
3
Java
代码
public static void main(final String[] args) {
Integer a = 156;
Integer b = 156;
System.out.println(a == b);
}

代码片段
4
Java
代码
public static void main(final String[] args) {
Integer a = Integer.valueOf(100);
Integer b = 100;
System.out.println(a == b);
}

一开始我通过网上查找资料,得出了答案。

代码片段1 false
代码片段2true
代码片段3
false
代码片段4 true

 

      后来看视频到基本数据类型包装新特性后才发现自己一开始,想的还是有些浅显了,虽然答案都是对的,但理解的并不深入。问题涉及到了好几个知识点,首先是

==是比较的两边是否指向同一个对象,其次Integer a=100其实就相当于

Integer a = new Integer(100),因为1.5出的新特性自动加包,直接将100封装为了对象,

所以Integer a = 100;Integer b = 100;其实也应该相当于两个对象,之所以ab指向了同一个对象,是因为java为了提高效率,初始化了-128--127之间的整数对象,所以在赋值

在这个范围内都是同一个对象。

  当数值超过后就是代码3的情况了:

Integer a = 156; 等效于Integera = new Integer(150);
Integer b = 156; 
等效于
Integer a = new Integer(150);
所向指向的是两个对象。

而代码4,等效于代码2Integer a = Integer.valueOf(100);相当于Integer a = 100在经过编译后的状态

                               -------android培训java培训、期待与您交流!----------

                                           详细请查看:http://edu.csdn.net/heima/