标签:否则 包装类 数据类型转换 布尔 参与 问题 变量 改变 基本数据类型
1. 基础数据类型转换原则
基础数据类型转换主要在在 赋值、方法调用、算术运算 三种情况下发生。
(1) 赋值和方法调用规则
从低位类型到高位类型自动转换;从高位类型到低位类型需要强制类型转换:
另外还有是直接数的赋值:先通过直接数判断其类型,然后基本原则和上面谈到的赋值原则基本一致;只是直接数是整数时特殊一点,当在可表示范围内时,可以直接赋值给 byte short char三种类型;
(2) 算术运算规则
a. 基本就是先转换为高位数据类型,再参加运算,结果也是最高位的数据类型;
b. byte short char运算会转换为Int;
特殊情况:
2. 引用类型转换规则
1. 数组转java.util.ArrayList
调用Arrays的asList方法。此方法返回一个按照正确的顺序包含此列表中所有元素的数组;返回数组的运行时类型就是指定数组的运行时类型。如果列表能放入指定的数组,则返回放入此列表元素的数组。否则,将根据指定数组的运行时类型和此列表的大小分配一个新的数组。
注:Arrays.asList()返回的不是java.util.ArrayList,而是Arrays的内部类,不支持add和remove的操作。
2. java.util.ArrayList转数组
调用ArrayList的toArray方法。此方法返回一个受指定数组支持的固定大小的列表。(对返回列表的更改会“直写”到数组)。
java.util.List list = new java.util.ArrayList(); list.add("1"); list.add("2"); /** * 错误转换: 这样写编译没有什么问题,但是运行时会报ClassCastException, * 这是因为Java中允许向上和向下转型,但是这个转型是否成功是根据Java虚拟机中这个对象的 * 类型来实现的。Java虚拟机中保存了每个对象的类型。而数组也是一个对象。 * 数组的类型是java.lang.Object。把java.lang.Object转换成java.lang.String是显然不可能的事情, * 因为这里是一个向下转型,而虚拟机只保存了这是一个Object的数组,不能保证数组中的元素是String * 的,所以这个转型不能成功。数组里面的元素只是元素的引用,不是存储的具体元素, * 所以数组中元素的类 */ //String[] arr = (String[])list.toArray(); //正确转换, 而且需要预先申请好数组空间 String[] arr = (String[])list.toArray(new String[list.size()]);
标签:否则 包装类 数据类型转换 布尔 参与 问题 变量 改变 基本数据类型
原文地址:https://www.cnblogs.com/myitnews/p/12316159.html