Java自动装箱与拆箱

一、布尔类型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;   //Autoboxing
boolean 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;   	 //autoboxing
int i1 = i0;		//unboxing
Integer 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);//F
System.out.println(s3.equals(s4));//T
System.out.println(s3 == s5);//T
System.out.println(s3.equals(s5));//T
System.out.println(s3 == s6);//F
System.out.println(s3.equals(s6));//T
System.out.println(s4 == s6);//F
System.out.println(s4.equals(s6));//T
System.out.println(s4 == s8);//F
System.out.println(s4.equals(s8));//T

false
true
true
true
false
true
false
true
false
true






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值