Java类型转换
Java是强类型语言,所以要进行有些运算的时候的,需要用到类型转换。
运算中,不同类型的数据先转化为同一类型,然后进行运算。
转换从低级到高级(根据容量来看):
低 ------------------------------------> 高
byte,short,char->int->long->float->double
//小数的优先级大于整数
类型转换分为强制类型转换和自动类型转换
1、强制类型转换
由容量大的数据类型转化为容量小的数据类型要用到强制类型转换,转换时要注意内存溢出的问题
强制类型转换的语法格式: (类型)变量名
类型转换的条件是转换的数据类型必须是兼容的。
【演示】
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
}
2、自动类型转换
容量小的数据类型可以自动转换为容量大的数据类型,这称为自动类型转换
例如: 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。
}
3、在类型转换时需要注意:
-
不能对布尔值进行转换;
-
不能把对象类型转换为不相干的类型;
-
在把高容量转换到低容量的时候,强制转换;
-
转换的时候可能存在内存溢出,或者精度问题!
-
转换不会四舍五入,而是直接抹去小数位;
-
操作比较大的数时,要留意是否溢出,尤其是整数操作时,
【演示】
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/