Java是强类型语言,所以要进行有些运算的时候的,需要用到类型转换。
运算中,不同类型的数据先转化为同一类型,然后进行运算。
转换从低级到高级(根据容量来看):
低 ------------------------------------> 高 byte,short,char->int->long->float->double //小数的优先级大于整数
类型转换分为强制类型转换和自动类型转换
由容量大的数据类型转化为容量小的数据类型要用到强制类型转换,转换时要注意内存溢出的问题
强制类型转换的语法格式: (类型)变量名
类型转换的条件是转换的数据类型必须是兼容的。
【演示】
public class Demo{ //强制转换格式: (类型)变量名 高--低 public static void main(String[] args) { int i =128; byte b = (byte)i; //数据类型为int的i强制转换为byte类型 //当将一种类型强制转换成另一种类型,而又超出了目标类型的表示范围,就会被截断成为一个完全不同的值,溢出。 System.out.println(i); //128 System.out.println(b); //内存溢出了,byte最大值才127,所以这行的结果是-128 }
容量小的数据类型可以自动转换为容量大的数据类型,这称为自动类型转换
例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,同样float数据类型的位数为 32,可以自动转换为64位的double类型。
【演示】
//自动转换 低--高 public static void main(String[] args) { int a = 128; double z = a; //容量小数据类型为int的a自动转换为容量大double类型 System.out.println(a); //128 System.out.println(z); //128.0 char c2 = 'A';//定义一个char类型 int i2 = c2+1;//char 类型和 int 类型计算 System.out.println("char类型和int计算后的值等于"+i2);//66 //c2 的值为字符 A ,查 ASCII 码表可知对应的 int 类型值为65,所以i2=65+1=66。 }
不能对布尔值进行转换;
不能把对象类型转换为不相干的类型;
在把高容量转换到低容量的时候,强制转换;
转换的时候可能存在内存溢出,或者精度问题!
转换不会四舍五入,而是直接抹去小数位;
操作比较大的数时,要留意是否溢出,尤其是整数操作时,
【演示】
public static void main(String[] args) { //操作比较大的数的时候,注意溢出问题 //JDK7新特性,数字之间可以用下划线分割 int money1 = 1000000000; //int money1 = 100000000000; 溢出了 int money2 = 1_000_000_000; System.out.println(money1); System.out.println(money2); int years1 = 20; int total1 = money1 * years1; //输出结果为:-1474836480,计算的时候溢出了 long total01 = money1 * years1; //money1 * years1默认是int,这行相当于把上面一行的结果转换为long,结果还是错的 long total02 = money1 * (long)years1; //正确写法 System.out.println(total1); //-1474836480 System.out.println(total01); //-1474836480 System.out.println(total02); //20000000000 } }
;
本文是学习狂神老师的课程时做的笔记,部分内容参考了狂神老师的视频和随笔
狂神老师课程链接:https://www.kuangstudy.com/