自动类型转换
容量小的数据类型可以自动转换为容量大的数据类型
byte b = 123;//byte b2 = 300;//报错,超过了byte最大值127//char c = -3;//报错,char范围是0~65536,不在范围char c2 = 'a';//a在ascii码里是98int i = c2;long d01 = 123213;float f = d01;
特例
可以将整型常量直接赋值给byte,short,char等类型变量,而不需要进行强制类型转换,只要不超出其表数范围
public static void main(String[] args){char a=100;//整型常量可以直接赋值int i=100;char b=i;//整型int变量不能直接赋值。错误: 不兼容的类型: 从int转换到char可能会有损失。char c=(char)i;//正确}
强制类型转换
用于显示的转换一个数值的类型。可能造成精度降低和溢出。
int i=100;char c=(char)i;//正确
注意!
当将一种类型强制转换成另一种类型,而又超出了目标类型的表示范围,就会被截断成为一个完全不同的值。
int i=-100;
char b=(char)i;
System.out.println(b);
类型提升
做所有的二元运算符(+-/*%),都会有类型提升的问题!
int a = 3;long b = 4;double d = 5.3;//int c = a+b; //a+b 提升为了long类型,报错。int c = (int)(a+b); //float f = a + d; //a+d 提升为了double类型,报错。float f = (float)(a + d);
注意!
类型转换中,如果超过了类型的表数范围,则返回错误的值。如下例
int money = 1000000000; //10亿int years = 20;long total = money*years; //返回的是负数 System.out.println(total);// -1474836480
正确的,提升类型
int money = 1000000000; //10亿int years = 20;long total = (long)money*years; System.out.println(total);// 20000000000
上例是在运算前先把money的类型从int提升到long。
再来一例:
//一个人70年心跳多少次long times = 70*60*24*365*70;//返回负数System.out.println(times);//-1719527296
正确的方式,在第一个数转为long类型
long times = 70L*60*24*365*70;
System.out.println(times);//2575440000
-------------
更多的Java,Angular,Android,大数据,J2EE,Python,数据库,Linux,Java架构师,:
http://www.cnblogs.com/zengmiaogen/p/7083694.html