类型转换
Java作为一个强类型编程语言,当不同类型之间的变量相互赋值的时候,会有较严格的校验。
int a = 10;
long b = 100L;
b = a;//把a赋值给b,可以通过编译
a = b;//编译失败
在Java中,当参与运算数据类型不一致时,就会进行类型转换。Java中类型转换分为两类:自动类型转换(隐式)和强制类型转换(显式)
一.自动类型转换(隐式)
自动类型转换即:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。特点:数据范围小的转为数据范围大的时会自动进行。
System.out.println(1024);//整型默认情况下是int
System.out.println(3.14);//浮点型默认情况下是double
int a = 100;
long b = 10L;
b = a;//a和b都是整型,a的范围小,b的范围大,当将a赋值geib的时候,编译器回自动将a提升为 //long类型,然后赋值.
a = b;//编译报错,long的范围比int大,会有数据丢失,不安全
float f = 3.14F;
double d = 5.12;
d = f;//编译器会将f转换为double,然后进行赋值
f = d;//double表示的数据范围大,直接将double类型交给float会有数据丢失,不安全
byte b1 = 100;//编译通过,100没有超过byte的范围,编译隐式将100转换为byte
byte b2 = 257;//编译失败,257超过了byte的数据范围,有数据丢失
二.强制类型转换(显式)
强制类型转换:当进行操作的时候,代码需要经过一定的格式处理,不能自动完成。特点:数据范围大的到数据范围小的。
int a = 10;
long b = 100L;
b = a;//int ---->long,数据范围由小到大,隐式转换
a = (int)b;//long---->int,数据范围由大到小,需要强转,否则编译失败
float f = 3.14F;
double d =5.12;
d = f//float---->double,范围由小变大,隐式转换
f = (float)d;//double---->float,范围由大变小,需要强转,否则编译失败
a = d;//报错,类型不兼容
a = (int)d;//int没有double表示的数据范围大,需要强转,否则编译失败
byte b1 = 100; //100默认为int,没有超过byte范围,隐式转换
byte b2 = (byte)257;//257默认为int类型,超过byte范围,需要显示转换,不然报错
boolean flag = true;
a = flag;//编译失败:类型不兼容
flag = a;//编译失败:类型不兼容
注意事项:
-
不同数字类型的变量之间赋值,表示范围更小的类型能隐式转换成范围较大的类型
-
如果需要把范围大的类型赋值给范围小的,需要强制类型转换,但是可能精度丢失
-
将一个字面值常量进行赋值的时候,Java会自动针对数字范围进行检查
-
强制类型转换不一定能成功,不相干的类型不能相互转换
Java类型转换:自动与强制转换规则详解,
本文介绍了Java中的类型转换,包括自动类型转换(如int转long、float转double)和强制类型转换(如long转int)。强调了不同类型间赋值时可能出现的数据范围和精度问题,以及强制转换的必要性。

690





