类型强制转换:
1. 因为Java中多态机制决定子类可以安全的以父类存在,所以有时候为了保证参数的多样性,我们会把一部分类型的对象转换为Object型,接收时候再按照需求进行转型、使用。
如:可以传入多种类型参数的方法。
public void test(Object obj) {
if (obj instanceof String) { // 如果传入为String
String str = (String) obj;
}
if (obj instanceof Integer) { // 传入为Integer
Integer it = (Integer) obj;
}
}
2. 集合类中的List、Set、Map等,如果在定义类型时使用Object或者元类型,则也需要在使用时进行选择性的转型。
List list = new ArrayList(); // List
自动打包、解包机制及基本数据类型的转换
1.相比隐性转型,我更倾向于把基本数据类型与包装类之间的转换称为自动打包、解包。这种转换不需要写程序的时候进行人为干涉,在程序执行时,自动在基本数据类型和封装类之间进行转换。
Listlist = new ArrayList ();
int num = 123;
list.add(num);
Integer num2 = list.get(0);
double d1 = 1.2d;
Double d2 = d1;
Character c1 = '中';
char c2 = c1;
2.基本数据类型相互转换
一种为精度(或者说范围)大的转换为精度小的,因为不存在损失精度的问题,可以直接转换过去。
int num = 15;
double d1 = num;
long l1 = num;
具体的可以参考java中8大基本数据类型对应的范围,数值型的基本类型,都可以不加强制转型的从范围大的转换为范围小的。
另一种就是范围小的转换为范围大的,存在数值溢出(精度丢失)的风险,所以需要进行强制转型。在转换时需注意超出范围的情况。
int a = 128;
byte b1 = (byte) a;
char c1 = (char) b1;
short s1 = (short) c