我对数值之间的类型转换有疑问。下面是java complete reference一书中的快照。它说,如果定义的值的范围适合byte/short的范围,则整数字面值将成功转换为byte或short。但是,当我尝试运行以下程序时,它抛出了一个错误。请澄清。谢谢。book
import java.util.Scanner;
class Test{
public static void main(String args[])
{ int a=10;
byte b=16;
b=a;
System.out.println(b);
}}
/tmp/IQOgFrykLL/Test.java:12: error: incompatible types: possible lossy conversion from int to byte
b=a;
^1 error
1条答案
按热度按时间wfveoks01#
它表示整数文本成功转换为字节或短整型
b=a
不涉及整数文本。整数字面量类似于
10
或16
:源代码中出现的实际数字。b=10
可以工作,因为10
是一个整型常量。实际上,它比只使用int型常量更通用:可以用任何编译时常量值进行赋值。
例如,如果你要将
a
设为final
,它就可以工作,因为a
将是一个编译时常量值,并且无论在哪里使用它,本质上都可以被int型文本10
替换。注意“编译时间常数”的定义是相当严格的:它必须是一个文本,或者是一个用编译时常量值初始化的最终变量。