Java自动装箱与拆箱

来源:互联网 发布:c语言if并列多个条件 编辑:程序博客网 时间:2021/02/25 16:02

一、布尔类型Boolean的情况

在java中,装箱与拆箱中会遇到这两种情况:

Boolean flag = false;System.out.println(flag = true);System.out.println(flag == true);

#Output:
true
true
Boolean flag = false;System.out.println(flag == true);System.out.println(flag = true);
#Output:
false
true

是不是很奇怪?为什么呢
第一种,是因为先将true赋给flag,if条件句里是赋值语句,故输出为true;然后再执行flag==true时,是判断语句,由于flag已经被赋值为true,故输出结果也为true
第二种,是先if语句先判断flag是否为true,显然不是,故输出为false;然后再执行if条件句里的赋值语句,故输出结果也为true

其实这里还有一个潜在的知识点:
Boolean flag = false;Boolean flag = Boolean.valueOf(false);
这两句是等价的。jdk1.5以后的版本引用了自动装箱与拆箱,下边的一句就是自动装箱。
Boolean flag = false;   //Autoboxingboolean flag1 = flag.booleanValue();  //unboxing
这两句分别是自动装箱(autoboxing)与拆箱(unboxing)。

什么是自动装箱呢?
Converting a primitive value (an int, for example) into an object of the corresponding wrapper class (Integer) is called autoboxing
(将一个基本类型的值转化为其对应包装类的对象就是自动装箱)
Converting an object of a wrapper type (Integer) to its corresponding primitive (int) value is called unboxing
(讲一个包装类型的对象转化为对应的基本类型就是拆箱)

二、对于整型的Integer的情况:
例:
Integer i0 = 200;    //autoboxingint i1 = i0;//unboxingInteger i2 = 200;System.out.println(i0 == i1);System.out.println(i0 == i2);   System.out.println(i0.equals(i2));  Integer i3 = new Integer(200);System.out.println(i0 == i3);System.out.println(i0.equals(i3)); System.out.println(i1 == i3);Integer i4 = 3;Integer i5 = 3;System.out.println(i4 == i5);System.out.println(i4.equals(i5));
#Out:
true
false
true
false
true
true
true
true

三、字符串String的情况

== 比较对象的引用是否相同,搜索引用就是对象地址。equals是对象的方法,基本上实现来比较对象自己的内容
说多了也没用,看程序
String s1 = "a";String s2 = "b";String s3 = "ab";String s4 = s1 + s2;String s5 = "a" + "b";String s6 = s1 + "b";StringBuffer s7 = new StringBuffer("abc");String s8 = s7.substring(0,2);System.out.println(s3 == s4);//FSystem.out.println(s3.equals(s4));//TSystem.out.println(s3 == s5);//TSystem.out.println(s3.equals(s5));//TSystem.out.println(s3 == s6);//FSystem.out.println(s3.equals(s6));//TSystem.out.println(s4 == s6);//FSystem.out.println(s4.equals(s6));//TSystem.out.println(s4 == s8);//FSystem.out.println(s4.equals(s8));//T

false
true
true
true
false
true
false
true
false
true






0 0
原创粉丝点击