博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java知识点梳理——装箱和拆箱
阅读量:5218 次
发布时间:2019-06-14

本文共 1885 字,大约阅读时间需要 6 分钟。

1、前言:Java是典型的面向对象编程语言,但其中有8种基本数据类型不支持面向对象编程,基本数据类型不具备对象的特性,没有属性和方法;Java为此8种基本数据类型设计了对应的类(包装类),使之相互转换,间接实现基本数据类型具备对象特性,丰富基本数据类型操作;

基本数据类型 包装类
byte Byte
short Short
int Integer
long Long
char Character
float Float
double Double
boolean Boolean

 

 

 

 

 

 

 

 

 

 

 注:int是基本数量类型,Integer是类;int和Ingeger初始值不同(int默认值0 Ingeger默认值null);Integer包含属性和方法,int则没有;基本数据类型和包装类相互转换的过程叫装箱和拆箱;

2、装箱:基本数据类型转换成对应的包装类(int——>Integer);

1 Integer i = new Integer(10); // 手动装箱2 Integer i = 10; // 自动装箱

3、拆箱:包装类转换成基本数据类型(Integer——>int);

1 Integer i =10; // 自动装箱2 int m = i; // 自动拆箱3 int n = i.intValue(); // 手动拆箱

4、自动装箱和自动拆箱:Java 1.5以后才有自动装箱、拆箱的特性;自动装箱是通过包装类的valueOf方法实现;自动拆箱是通过包装类的xxxValue方法实现;

1 Integer i = Integer.valueOf(10); // 调用valueOf方法自动装箱2 int n = i.intValue(); // 调用intValue方法自动拆箱

 注:自动装箱会隐式地创建对象,在一个循环中注意自动装箱问题,影响程序性能;

5、equals 和 == 比较:当 "=="运算符的两个操作数都是包装类,则是比较指向的是否是同一个对象,而如果其中有一个操作数是表达式(即包含算术运算)则比较的是数值(触发自动拆箱);对于包装类,equals方法不会进行类型转换;

1 public class Main { 2     public static void main(String[] args) { 3           4         Integer a = 1; 5         Integer b = 2; 6         Integer c = 3; 7         Integer d = 3; 8         Integer e = 321; 9         Integer f = 321;10         Long g = 3L;11         Long h = 2L;12          13         System.out.println(c==d); // true14         System.out.println(e==f); // false15         System.out.println(c==(a+b)); // true16         System.out.println(c.equals(a+b)); // true17         System.out.println(g==(a+b)); // true18         System.out.println(g.equals(a+b)); // false19         System.out.println(g.equals(a+h)); // true20     }21 }

 解析:JVM会缓存-128到127的Integer对象(Short、Byte、Character、Long与Integer类似),所以第一个是同一个对象true,第二个是new的新对象false;第三个有+法运算比较的是两边的值true;第四个有+法运算且两边的数据类型相同true;第五个同四先求+法求和 ,==会进行类型转换(Long)true;第六个先+法求和,equals不会类型转换false;第七个先+法求和(触发拆箱,变成了int类型和long类型相加,这个会触发类型晋升,结果是long类型的)equals比较时触发装箱比较两边都是Long类型结果true;

 

转载于:https://www.cnblogs.com/lbxx/p/9370939.html

你可能感兴趣的文章
解决无法远程登录windows2003服务器
查看>>
linux无法安装应用
查看>>
01 lucene基础 北风网项目培训 Lucene实践课程 索引
查看>>
Python中的list和tuple
查看>>
HDU2048
查看>>
调用cgi脚本也会发送http请求。
查看>>
jquery mobile 左右滑动
查看>>
C#学习笔记(基础知识回顾)之值传递和引用传递
查看>>
Jquery 表格固定表头
查看>>
XMPP框架下微信项目总结(1)环境配置
查看>>
计算几何初步——共面判断(FZU1393)
查看>>
MurMurHash3
查看>>
C# List 赋值(一) --引用类型的赋值和复制
查看>>
jsp页面和action的传值与action和action之间的转换传值等四个问题
查看>>
动态代理之JDK Proxy浅析
查看>>
Win10系统进行远程桌面连接出现身份验证错误怎么办
查看>>
去世父亲在儿子手机中复活,这可能是最温暖的一个AI
查看>>
在centos7上安装ClamAV杀毒,并杀毒(centos随机英文10字母)成功
查看>>
杭电2059(dp)
查看>>
case when then else end mysql
查看>>