—— 本文参照 Learn Java for Android Development (第三版)
其实在实际的开发中类型转换也并不是必须的,比如把高级数据向低级数据转换的时候不产生数据丢失的话。举一个简单的例子:byte b = 100;在这段代码里面我们的编译器首先会把一个整形数字100赋值给一个字节整形变量b,而100完全可以存放在这个b变量所占用的内存空间里面的,不会存在存放不下而数据丢失的可能。
下面这个例子让我们来感受一下数据类型转换的应用:
public class Example
{
public static void main(String[] args)
{
short s = (short) 1.65 + 3;
System.out.println(s);
char c = 'A';
byte b = (byte) c;
System.out.println(b);
b = 100;
System.out.println(b);
s = 'A';
System.out.println(s);
s = (short) '\uac00';
System.out.println(s);
}
}
在main函数里面,首先我们使用(short)操作数的方式把表达式1.65+3转化为短整形,然后将结果赋值为变量s,并将结果打印出来。接下来的表达式是将一个16位的无符号整形变量强制转化为8位的有符号整形,并将其打印出来。
如刚刚提到的有时候类型转化符也不是必须的,b=100,将100赋值给一个范围是-128到127的变量,100在这个范围内,所以不会有数据丢失,所以编译器不会报错或者抛出异常。
同理我们的字符A可以直接赋值给一个16位短整形变量而不会造成数据丢失,这里是因为字符A在短整形的数据范围内,所以可以省掉类型转换符,如果超出范围的话就必须显式加上类型转换符号。例如s = (short) '\uac00';
编译执行上面的代码可以得到如下打印(javac Example.java
java Example):
4
65
100
65
-21504
Page 60