类型转换
由于Java是强转换型语言,所以要进行有些运算的时候需要用到类型转换。
低----------------------------------------------------------------------------------------高
byte,short,char-----int-----long-----float-----double 小数的优先级大于整数
*运算中,不同类型的数据先转化为同一类型,然后进行运算
package lin;
public class Demo03 {
public static void main(String[] args) {
//强制转换 由大范围到小范围 (类型)变量名
int i=128;
byte b=(byte)i;//内存溢出:byte范围-128到127,超出容量就会从头计数重新循环!!
System.out.println(b);//输出-128
System.out.println("--------------");
//自动转换 小范围到大范围 同等级也是自动转换
int i1=122;
double b1=i1;
System.out.println(b1);//输出122.0 因为double是小数
/**
* 注意点:
* 1.不能对布尔值进行转换
* 2.不能把对象类型转换为不相干类型
* 3.在把高容量转换为低容量时,强制转换
* 4.转换的时候可能存在内存溢出,或者精度问题
*/
System.out.println((int)28.1);//28精度问题,转换
System.out.println((int)-48.89f);//48精度问题
System.out.println("--------------");
char c='a';
int d=c+1;
System.out.println(d);//输出98
System.out.println((char)d);//输出b 因为c+1=d c=a a后面为b
System.out.println("--------------");
//操作比较打的数字时,注意溢出问题 数字直接可以用下划线分割
int money =10_0000_0000;
int years =20;
long total=money*years;
//System.out.println(total);//-1474836480 计算的时候溢出 int最大范围21亿
long total1=(long)total;//因为相乘的时候是int类型,相乘后也是结果依然是-147.。。转换成long之后也是这个结果
System.out.println(total1);//数值依旧不变,知识点:byte,short,int,在和int一起计算的时候都会转换为int
//内容的溢出在转换类型的时候已经产生,转换无效
long total3=money*(long)years;//不算强制转换,两个数值相乘之后自动转换为int类型,
// 内容溢出,把其中一个转成long之后相乘结果回自动转换为long类型
System.out.println(total3);//输出200亿,两个数无论转换哪一个都可以成功输出或者两个都转换
}
}