Java笔记之自动装/拆箱以及类型转换
2017-04-30 22:11
218 查看
1.基础概念
Java中所有的基本类型都有其对应的包装类
基础类型:
boolean char byte int float double long
包装类
Boolean Character Byte Integer Float Double Long Short Void
所谓的装箱就是一个包装类对象接收了一个基础类型对象,这时候就会发生装箱
,将基础类型对象转化成包装类对象,下面使用例子说明
在Integer ii = 5; 这行设置断点。
由图片可知, Integer ii = Integer.valueOf(5);
继续向下debug 当运行 ii++时由于++运算符只能对基本数据进行操作
所以ii先会拆箱为int类型再装箱为integer类型
拆箱
运算完成后会装箱成integer类型
陷阱
包装类 Character Integer Float Double Long
在进行==比较时的陷阱
包装类 Character Integer Long 都具有缓冲池 如果其大小[-128-127]之间直接返回缓存池中的对象 所以比较结果为true 超出范围 就好new一个新对象 那么两个的引用就不同了所以为false
包装类 Float Double 无缓冲池 所以无论大小如何结果都为false
类型装换
两个操作数进行二元操作时,要先转为同一类型再计算
- 两个数中有一个为double 则另一个数为double类型
- 否则 其中有一个数为float类型 另一个操作数为float类型
- 否则 如果有一个为long类型 另一个操作数为long类型
- 否则两个都为int类型
小数类型默认为double类型
所以需要强转
数值进行二元计算最小为int类型所以要进行强制转换
到此类型转换以及拆装箱至此差不多结束了
水平有限 若有错误 欢迎指正
参考书籍《Java核心技术》
Java中所有的基本类型都有其对应的包装类
基础类型:
boolean char byte int float double long
包装类
Boolean Character Byte Integer Float Double Long Short Void
所谓的装箱就是一个包装类对象接收了一个基础类型对象,这时候就会发生装箱
,将基础类型对象转化成包装类对象,下面使用例子说明
public static void main(String[] args) { Integer ii = 5; ii++; }
在Integer ii = 5; 这行设置断点。
由图片可知, Integer ii = Integer.valueOf(5);
继续向下debug 当运行 ii++时由于++运算符只能对基本数据进行操作
所以ii先会拆箱为int类型再装箱为integer类型
拆箱
运算完成后会装箱成integer类型
陷阱
包装类 Character Integer Float Double Long
在进行==比较时的陷阱
public static void main(String[] args) { Integer i1 = 15; Integer i2 = 15; Integer i3 = 1000; Integer i4 = 1000; System.out.println(i1 == i2); System.out.println(i3 == i4); Character c1 = 15; Character c2 = 15; Character c3 = 300; Character c4 = 300; System.out.println(c1 == c2); System.out.println(c3 == c4); Float f1 = (float) 15; Float f2 = (float) 15; Float f3 = (float) 1500; Float f4 = (float) 1500; System.out.println(f1 == f2); System.out.println(f3 == f4); Long l1 = (long) 15; Long l2 = (long) 15; Long l3 = (long) 1500; Long l4 = (long) 1500; System.out.println(l1 == l2); System.out.println(l3 == l4); Double d1 = 15.1; Double d2 = 15.1; Double d3 = 1500.1; Double d4 = 1500.1; System.out.println(d1 == d2); System.out.println(d3 == d4); } 结果 true false true false false false true false false false
包装类 Character Integer Long 都具有缓冲池 如果其大小[-128-127]之间直接返回缓存池中的对象 所以比较结果为true 超出范围 就好new一个新对象 那么两个的引用就不同了所以为false
包装类 Float Double 无缓冲池 所以无论大小如何结果都为false
类型装换
两个操作数进行二元操作时,要先转为同一类型再计算
- 两个数中有一个为double 则另一个数为double类型
- 否则 其中有一个数为float类型 另一个操作数为float类型
- 否则 如果有一个为long类型 另一个操作数为long类型
- 否则两个都为int类型
小数类型默认为double类型
Float f3 = (float) 1500; Long l1 = (long) 15;
所以需要强转
数值进行二元计算最小为int类型所以要进行强制转换
byte i1 = 1; byte i2 = 2; i1 = (byte) (i1 + i2); i1 += i2; char a = 1; char b = 1; a = (char) (a + b); a += b; a++; short s = 1; short s1 = 1; s = (short) (s + s1);
到此类型转换以及拆装箱至此差不多结束了
水平有限 若有错误 欢迎指正
参考书籍《Java核心技术》
相关文章推荐
- 黑马程序员--张孝祥Java高新技术-JDK1.5新特性(二)【基本数据类型的自动拆箱与装箱,枚举】以及享元设计模式
- java笔记之封装、继承、重写、多态以及类型转换
- 小白Java笔记——基本类型的类型转换和表达式类型的自动提升
- JAVA基础--可变参,自动装箱与拆箱,类型转换
- daliu_it java基础笔记之 变量和数据类型以及数据类型之间的转换以及转义字符
- Java八种基本数据类型的大小,以及封装类,自动装箱/拆箱的用法?
- 黑马程序员—Java基础学习笔记之数据类型转换(自动转换和强制转换)
- Java基本数据类型的大小,他们的封装类以及自动拆箱和装箱
- 【JAVA学习】java基本数据类型与字符串之间的转换(基本数据类型、对象封装类、自动装箱、自动拆箱)
- java语言基础(59)——jdk5自动装箱和拆箱(基本数据类型与包装类之间的转换)
- java基本数据类型与字符串之间的转换(基本数据类型、对象封装类、自动装箱、自动拆箱)
- 第二十一篇 Java 数据类型的定义 ,以及基础类型的自动转换和强制转换
- Java入门基础之数据类型的转换、包箱、拆箱(附习题) 个人笔记
- Java中的基本类型与封装类型以及自动装箱、拆箱、String类型的解释
- Java基本类型以及基本类型间的自动转换
- java笔记之封装、继承、重写、多态以及类型转换
- Java中的基本类型与封装类型以及自动装箱、拆箱
- java笔记之封装、继承、重写、多态以及类型转换
- 加强eclipse的使用技巧。可变参数。基本数据类型自动装箱和拆箱。枚举。反射。数组反射的应用。ArrayList和HashSet。JavaBean
- java类型自动转换