Java自动装箱与拆箱

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

一、布尔类型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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 2岁宝宝又吐又拉怎么办 u盘坏了怎么办没反应了 怀孕了不知道孩子是谁的怎么办 怀孕八个月耻骨疼的厉害怎么办 没感情了这段婚姻该怎么办 1岁半宝宝o型腿怎么办 4s店没按时交车怎么办 几天几夜睡不着觉没有睡意怎么办 辣的吃多了胃疼怎么办 喉咙痛怎么办有最好即简单好得快 减肥过后皮肤留下的肥胖纹怎么办 用了完美玛丽艳脸上长痘痘怎么办 腰疼怎么办8方法解决腰疼 红米3x开不了机怎么办 苹果手机忘记了锁屏密码怎么办 小米5的4g网速慢怎么办 红米4a卡机了怎么办 信而富逾期3个月怎么办 苹果6锁屏密码忘了怎么办 孕8个月咳嗽有痰怎么办 微信红包输了6万怎么办 红米3s开不了机怎么办 核载5人载了6人怎么办 我欠支付宝2万6怎么办 我47岁这个月经不来怎么办 两个月不来月经了也没怀孕怎么办 婴儿不吃奶粉母乳又不够吃怎么办 怀孕39周了还没反应怎么办 脸过敏了又红又痒怎么办 刚开的淘宝店没生意怎么办 我22岁长得显老怎么办 卡的钱被qq转走怎么办 招行u盾密码忘了怎么办 孩子上五年级了成绩非常差怎么办 红米3s开不开机怎么办 皮肤被虫子咬了红肿痒怎么办 微信被骗了1万多怎么办 6个月宝宝吃了纸怎么办 农行k宝扣了50块怎么办 4g流量用的太快怎么办 怀疑老公有外遇最明智的怎么办