一:java中类型转换图
备注:
1.默认整型为 int
2.默认浮点型 double
public static void main(String[] args) {
long a = 10000000000; //编译出错: The literal 10000000000(默认是int 范围出界) of type int is out of range
long b = 10000000000L; //编译正确(改变默认 末尾加L)
int c = 1000;
long d = c;
float e = 1.5F;
<span style="white-space:pre"> </span>double f = e;(默认是double)
}
3.由于范围的问题 byte不能自动提升到char ,char不能自动提升到short
二:隐含类型转换与强制类型转换
隐含类型转换
1.将一个范围较小的类型赋值给范围大的类型,jvm自动在编译时进行类型提升
2.将一个范围较大的类型赋值给范围小的类型N
case 1:默认为int 超过当数值范围N时编译出错,此时你需要强制类型转换
低于数值范围N时,隐式转换为类型N(虚线处)
public static void main(String[] args) {
byte a = 1000; // 编译出错 Type mismatch: cannot convert from int to byte
float b = 1.5; // 编译出错 Type mismatch: cannot convert from double to float
byte c = 3; // 编译正确
}
强制类型转换
public static void main(String[] args) {
byte p = 3; // 编译正确:int到byte编译过程中发生隐式类型转换
<span style="white-space:pre"> </span>int a = 3;
byte b = a; // 编译出错:cannot convert from int to byte
byte c = (byte) a; // 编译正确
float d = (float) 4.0;
}
三:float及double运算(float和double只能用来做科学计算或者是工程计算; 在商业计算中我们要用java.math.BigDecimal)
四:经典题目分析Q1:short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会自动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
对于short s1 = 1; s1 += 1;由于 += 是java语言规定的运算符,java编译器会对它进行特殊处理,因此可以正确编译。
Q2:if(userName.equals("hh")){}问题?
当userName为null 时 报空指向异常,改为"hh".equals(userName)