如果我写这样的东西
System.out.println(18);
哪种类型有“18”?
是吗int or byte?
或者它还没有类型?
它不能是 int,因为这样的东西是正确的:
byte b = 3;
这是不正确的:
int i = 3;
byte bb = i; //error!
编辑:
我想我在规范中找到了正确的部分分配转换 http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.2 :
常量的编译时缩小意味着诸如以下的代码:
字节答案 = 42;
被允许。如果没有缩小范围,整数文字 42 具有 int 类型这一事实意味着需要强制转换为 byte:
字节答案 = (字节) 42; // 允许强制转换,但不是必需的
This
18
被称为整数字面量 http://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10.1。各种各样的都有literals http://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.10, 浮点,String
、性格等
在下面的,
byte b = 3;
字面意思3
是一个整数文字。这也是一个常量表达式。因为 Java 可以告诉我们3
适合一个byte
,它可以安全地应用缩小原始转换 http://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.1.3并将结果存储在byte
多变的。
In this
int i = 3;
byte bb = i; //error!
字面意思3
是一个常量表达式,但是变量i
不是。编译器只是简单地决定i
不是常量表达式,因此不会特意计算其值,转换为byte
可能会丢失信息(如何转换12345
to a byte
?)因此不应被允许。您可以通过以下方式覆盖此行为i
常量变量
final int i = 3;
byte bb = i; // no error!
或者通过指定显式强制转换
int i = 3;
byte bb = (byte) i; // no error!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)