17.类型转换

来源:互联网 发布:浙江网站建设 seo 编辑:程序博客网 时间:2024/06/05 00:27

自动类型转换

容量小的数据类型可以自动转换为容量大的数据类型

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





0 0
原创粉丝点击