java中的自动类型转换

v09wglhw  于 2023-02-18  发布在  Java
关注(0)|答案(1)|浏览(91)

我对数值之间的类型转换有疑问。下面是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
wfveoks0

wfveoks01#

它表示整数文本成功转换为字节或短整型
b=a不涉及整数文本。
整数字面量类似于1016:源代码中出现的实际数字。
b=10可以工作,因为10是一个整型常量。
实际上,它比只使用int型常量更通用:可以用任何编译时常量值进行赋值。
例如,如果你要将a设为final,它就可以工作,因为a将是一个编译时常量值,并且无论在哪里使用它,本质上都可以被int型文本10替换。
注意“编译时间常数”的定义是相当严格的:它必须是一个文本,或者是一个用编译时常量值初始化的最终变量。

  • 声明一个非final变量并且永远不改变它的值并不能使它成为编译时常量:你必须告诉编译器它的值不能通过final改变。
  • 将变量声明为final也不会使其成为编译时常量:你给它的值也必须是一个编译时常量。

相关问题