数据类型转换
当数据类型不一致时,会发生数据类型转换
自动类型转换(隐式)
- 特点:代码不需要进行特殊处理,自动完成转换
- 规则:数据范围从小到大(即赋值符号右面的数据类型范围要小于赋值符号左面的数据类型)
-
public class HelloWorld{ public static void main (String[] args){ System.out.println(123);//这是一个整数,默认是int类型 System.out.println(3.14);//这是一个小数,默认是double类型 long num1=100; System.out.println(num1); double num2=2.5F; System.out.println(num2); float num3=30L; System.out.println(num3); } }
D:javatest>javac -encoding "UTF-8" HelloWorld.java D:javatest>java HelloWorld 123 3.14 100 2.5 30.0 D:javatest>
强制类型转换(显式)
- 特点:代码需要进行特殊处理,不能自动完成转换
- 格式:范围小的数据类型 变量名=(范围小的数据类型)范围大的数据
-
public class HelloWorld{ public static void main (String[] args){ int num1=(int)100L; System.out.println(num1); } }
D:javatest>javac -encoding "UTF-8" HelloWorld.java D:javatest>java HelloWorld 100
注意事项
- 强制类型转换一般不推荐使用,因为有可能出现精度损失、数据溢出
- byte、short、char这三种数据类型都可以发生数据运算
- byte、short、char这三种数据类型在参与数据运算时,都会首先提升成int类型
- boolean类型不能进行数据运算
-
public class HelloWorld{ public static void main (String[] args){ //将long类型强制转换成int类型 int num1=(int)6000000000L; System.out.println(num1);//结果:1705032704,导致数据溢出 //将float类型强制转换成int类型 int num2=(int)3.99F; System.out.println(num2);//结果是:3,导致数据精度损失 char var1='A'; System.out.println(var1+1);//结果是66 byte num3=30; byte num4=50; int a=num3+num4; System.out.println(a); short num5=200; short b=(short)(num3+num5); System.out.println(b); } }
D:javatest>java HelloWorld 1705032704 3 66 80 230 D:javatest>