数据类型转换
数据类型由低到高排序:
byte–short–char–int–long–float–double (小数优先级一定大于整数)
需注意:运算中,不同类型的数据先转化为同一类型,然后进行运算。
强制类型转换:由高转到低类型
public class demo08 {
public static void main(String[] args) {
// 强制转换 由高转到低 (类型)变量名
int i = 128;
byte b = (byte)i; //byte类的最大值为127
System.out.println(i); //运行结果为128
System.out.println(b); //运行结果为-128 内存溢出
}
}
自动类型转换:由低转到高类型
public class demo08 {
public static void main(String[] args) {
// 自动转换 由低转到高
int i1 = 128;
double b1 = (double)i;
System.out.println(i1); //运行结果为128
System.out.println(b1); //运行结果为128.0
}
}
需注意以下几点:
- 不能对布尔值进行转换
- 不能把对象类型转换为不相干的类型
- 在把高容量转换为低容量时,需要强制转换
- 转换时,可能存在内存溢出或者精度问题!
char c = 'a';
int d = c + 1;
System.out.println(d); // 运行结果为98
System.out.println((char)d); // 运行结果为b
public class demo09 {
public static void main(String[] args) {
// 操作比较大的数时,注意溢出问题
// JDK7新特性,数字之间可以用下划线(_)分割
int money = 10_0000_0000;
System.out.println(money); // 运行结果为1000000000
int year = 20;
int total = money*year;
long total2 = money*year;
System.out.println(total); // 运行结果为-1474836480 计算时溢出
System.out.println(total2); // 运行结果为-1474836480 默认是int 计算结束后才转换为long类型 但是转换之前就有问题
// 因此需要在计算之前就做转换,如下
long total3 = money*((long)year);
System.out.println(total3); // 运行结果为20000000000
}
}