# 基本数据类型的更多语法点
# 自动类型转换
- java 会自动帮我们把低精度转换为高精度
- 不会出现问题的类型转换,变成语言可以做自动类型转换,比如低精度的数字向高精度数字转换
- 自动类型转换可以发生在算数运算,也可以发生在赋值
# 数值精度顺序
double
-> float
-> long
-> int
-> short
-> byte
举个例子:
public class AutoConvert {
public static void main(String[] args) {
int intVal = 99;
// 自动类型转换 int -> long
long longVal = intVal;
System.out.println(longVal);
// 自动类型转换 float -> double
float floatVal = 11.32f;
double doubleVal = floatVal;
System.out.println(doubleVal);
}
}
提示
java 中, int 类型除以 int 类型, 得到的还是 int 类型
比如:
int a = 99;
int b = 5;
System.out.println(a / b); // 19
int a = 99;
double b = 5;
System.out.println(a / b); // 19.8
# char 可以转为 int
char
可以转换为int
- 虽然同样是两个
byte
,但是因为char
是无符号数,值域超出了short
可以表示的范围,所以不可以自动转为short
举个例子:
char ch = 'A';
int chNum = ch;
int chNumCalc = ch + 10;
System.out.println(ch); // A
System.out.println(chNum); // 65
# 强制类型转换
- 可能出现问题的类型转换,需要使用强制类型转换, 比如高精度数值向低精度数值转换
- 强制类型转换也是操作符
- 语法是用小括号括起来的目标类型放在被转换的值前面
- 强制转换会造成数据精度丢失
举个例子:
public class AutoConvert {
public static void main(String[] args) {
int intVal = 99;
// 自动类型转换 long -> int
long longVal = 19999;
intVal = (int) longVal;
System.out.println(intVal);
// 自动类型转换 double -> float
float floatVal = 11.32f;
double doubleVal = 3344.4334;
System.out.println(doubleVal);
int a = 65;
char b = (char) a;
System.out.println(b); // A
}
}