第14页:
http://www.cs.nyu.edu/~cconway/teaching/cs1007/notes/types.pdf
始终假设转换适合:
从哥伦比亚读取笔记,它指出long将自动转换为int / short / byte并且int将自动转换为short / byte,但不会留下最后一个明显的转换(short to byte)。
这种遗漏是错误还是实际上语言的运作方式?
有没有办法测试这个?
这里是图形
答案 0 :(得分:7)
首先,请注意文本正在讨论编译时常量表达式。只允许编译时常量表达式缩小转换。来自language specification, section 5.2:
此外,如果表达式是byte,short,char或int类型的常量表达式(第15.28节):
- 如果变量的类型是byte,short或char,则可以使用缩小的基元转换,并且常量表达式的值可以在变量的类型中表示。
从编译时常量short
到byte
的隐式缩减赋值转换这一事实并不是很明显,因为没有short
个字面值;仅限int
和long
。要获得编译时常量short
,您必须使用如下所示的技巧:
// Casting:
byte b2 = (short) 42;
// Compile-time constant short value:
static final short s = 42;
byte b = s;
另一方面,您的讲义还指出,从long
到int
以及较小的整数类型存在隐含的缩小转换。这是不正确的,转换只能在表达式为byte
,short
,char
或int
时使用。他们用来说明的代码片段会产生编译时错误:
int i = 0x12345678L; /* "error: possible loss of precision" */