Java是强类型语言,有时在进行某些运算时,需要类型转换
(运算中,不同类型的数据先转化为同一类型,然后进行运算)
数据强度
各个数据类型处理数据的字节范围不同:
低————————————————————————————————————————————>高
byte,short,char ——> int ——> long ——> float ——> double
高到低需要强制转换
强制转换
int i = 128;
byte b = i;
报错!byte占一个字节的范围:-128——127。需要强制转换——> byte b = (byte)i;
形式为:(数据类型)变量名
强制转换可能出现内存溢出的问题
数据溢出
改正后代码:
int i = 128;
byte b =(byte) i;//强制转换
System.out.println(i);
System.out.println(b);
结果输出:128
-128//内存溢出。byte占一个字节的范围:-128——127。
低到高则是自动转换
自动转换
int i = 128;
double b = i;
没有任何问题
结果输出:128
128.0
注意点
不能对布尔值进行转换
不能把对象类型转换为不相干的类型
在把高容量转换到低容量的时候,强制转换
转换的时候可能存在内存溢出,或者精度问题!
System.out.println((int)23.7);//23
System.out.println((int)-45.89f);//-45
eg
public class Dome06 {
public static void main(String[] args) {
//操作比较大的数字时注意溢出问题
//JDK7新特性,数字之间可以用下划线分割
int money = 10_0000_0000;
int years = 20;
int total = money*years;//-1474836480计算的时候溢出了
System.out.println(total);
}
}
更正
public class Dome06 {
public static void main(String[] args) {
//操作比较大的数字时注意溢出问题
//JDK7新特性,数字之间可以用下划线分割
int money = 10_0000_0000;
int years = 20;
int total = money*years;//-1474836480计算的时候溢出了
long total2 = money*years;//默认是int,转换之前已经存在问题了
long total3 = money*((long)years);
System.out.println(total3);//20000000000没有问题
}
}