Java是强类型语言(强制类型定义语言,即一个变量被定义为一个数据类型之后,如果不进行强制类型转换那么该变量就一直是该数据类型),所以有时候运算需要使用类型转换。
类型转换分为强制类型转换和自动类型转换
数据字节大小:低------------------------------------------------------→高
byte,char,short→int→long→float→double
强制类型转换:高→低 转换方法:(类型名)变量
举例:int i =128;
byte i2 = (byte)i;
不过上面的代码把i2输出后输出结果会变成-128,这是关于内存溢出的问题,具体不再赘述(其实我还没学到)
自动类型转换:低→高 转换方法:正常转换
举例:byte i =127;
int i2 = i;
//这样已经转换了
运算时需要先转换成同一类型。
举例:
public class demo05 {
public static void main(String[] args) {
int money = 10_0000_0000;//jdk7新特性,可以用下划线分割数字,不影响输出
int years = 20;
int salary = money*years;
System.out.println(salary);
}
}
输出结果:
这就是内存溢出,int类型数据字节不够需要转换成更多字节的数据类型才能输出正确的结果例如long类型
修改代码把salary强制转换为long后输出结果不会变
public class demo05 {
public static void main(String[] args) {
int money = 10_0000_0000;//jdk7新特性,可以用下划线分割数字,不影响输出
int years = 20;
long salary = money*years;
System.out.println(salary);
}
}
输出结果还是
这就是在运算后转换数据类型,并不能zhua想到达到的作用,因此我们需要在运算前就进行数据类型转换,把int类型转换为long类型
public class demo05 {
public static void main(String[] args) {
int money = 10_0000_0000;//jdk7新特性,可以用下划线分割数字,不影响输出
int years = 20;
long salary = money*(long)years;
System.out.println(salary);
}
}
这样就会输出正确的结果
注意!1.boolean类型不能强制转换
2.不能把对象类型转换成不相干的类型
3.转换时可能会出现内存溢出和精度丢失(例如小数转换成整数会丢失小数点后的数字)问题 System.out.println((int)36.126f);//会输出36
ps:疫情又出来闹妖了,希望不会延迟开学七道