在图中虚线表示丢失精度,实线表示不丢失精度
char
|
byte——————>short————————>int——————————>long
| |
| |
| |
float——————>double
int 转换为double不丢失精度
long转换为float丢失精度
package test;
//测试自动转型和强制转型
public class TestCast {
public static void main(String[] args) {
byte b = 123;
//byte b2 = 300;报错
//char c = -3; 报错
char c2 = 'a';
int i = c2;
long d01 = 123213;
float f = d01; //long可以转换成float,但有可能丢失精度
//测试强制转型
//int i2 = -100; 超了char的表述范围,所以转换成无意义的值
int i2 = 100;
char c3 = (char)i2;
System.out.println(c3);
//表达式中的类型提升问题
int a1 = 2;
long b1 = 3;
int c1 = (int)(a1 + b1);
double d1 = 5.3;
float e1 = (float)(a1 + d1);
int money = 1000000000; //10亿
int years = 20;
long total = (long)money*years; //返回的 是负数
//long total = (long)(money*years);//这样转化不行,因为它们乘积已经溢出了
System.out.println(total);
//一个人70年心跳多少次
long time = 70L*60*24*365*70;
System.out.println(time);
}
}