📅  最后修改于: 2020-02-14 12:39:20             🧑  作者: Mango
当您将一种数据类型的值分配给另一种数据类型时,这两种类型可能彼此不兼容。如果数据类型兼容,那么Java将自动执行称为自动类型转换的转换,如果不兼容,则需要将其显式转换,例如,将int值分配给long变量。
加宽或自动类型转换
当自动转换两种数据类型时,将进行加宽转换。这种情况发生在以下情况:
例如,在Java中,数字数据类型彼此兼容,但是不支持从数字类型到char或boolean的自动转换。而且,char和boolean彼此不兼容。 例:
class Test
{
public static void main(String[] args)
{
int i = 100;
// 自动数据类型转换
long l = i;
// 自动数据类型转换
float f = l;
System.out.println("Int 值 "+i);
System.out.println("Long 值 "+l);
System.out.println("Float 值 "+f);
}
}
输出:
Int 值 100
Long 值 100
Float 值 100.0
缩小或明确转换
如果要将较大的数据类型的值分配给较小的数据类型,则执行显式类型转换或缩小。
字符和数字彼此不兼容。让我们看看何时尝试将一个转换为另一个。
//Java程序展示不兼容的类型转换
public class Test
{
public static void main(String[] argv)
{
char ch = 'c';
int num = 88;
ch = num;
}
}
错误:
7: error: incompatible types: possible lossy conversion from int to char
ch = num;
^
1 error
如何进行显式转换?
例:
//Java程序展示显式转换
class Test
{
public static void main(String[] args)
{
double d = 100.04;
// 显式转换
long l = (long)d;
// 显示转换
int i = (int)l;
System.out.println("Double的值 "+d);
// 小数部分丢失
System.out.println("Long的值 "+l);
// 小数部分丢失
System.out.println("Int的值 "+i);
}
}
输出:
Double的值 100.04
Long的值 100
Int的值 100
在将值分配给字节类型时,小数部分丢失并减少为256模(字节范围)。
例:
//Java程序,展示将int和double类型转换为byte
class Test
{
public static void main(String args[])
{
byte b;
int i = 257;
double d = 323.142;
System.out.println("将int类型转换为byte.");
//i%256
b = (byte) i;
System.out.println("i = " + i + " b = " + b);
System.out.println("\n将double类型转换为byte.");
//d%256
b = (byte) d;
System.out.println("d = " + d + " b= " + b);
}
}
输出:
将int类型转换为byte.
i = 257 b = 1
将double类型转换为byte.
d = 323.142 b = 67
表达式中的类型提升
在评估表达式时,中间值可能会超出操作数的范围,因此将提升表达式值。类型提升的一些条件是:
例:
//Java程序展示表达式中的类型提升
class Test
{
public static void main(String args[])
{
byte b = 42;
char c = 'a';
short s = 1024;
int i = 50000;
float f = 5.67f;
double d = .1234;
// 表达式
double result = (f * b) + (i / c) - (d * s);
// 打印提升后计算的结果
System.out.println("result = " + result);
}
}
输出:
Result = 626.7784146484375
表达式中的显式类型转换
在评估表达式时,结果将自动更新为较大的操作数数据类型。但是,如果将结果存储在任何较小的数据类型中,则会产生编译时错误,因此我们需要对结果进行类型转换。
例:
//Java程序,展示将int类型转换成byte
class Test
{
public static void main(String args[])
{
byte b = 50;
// int类型转换成byte
b = (byte)(b * 2);
System.out.println(b);
}
}
输出
100
注意:如果是单个操作数,则将结果转换为int,然后按照上面的示例进行相应的类型转换。