短路会自动转换为字节吗?

时间:2013-09-19 13:11:57

标签: java

第14页:

http://www.cs.nyu.edu/~cconway/teaching/cs1007/notes/types.pdf

始终假设转换适合:

从哥伦比亚读取笔记,它指出long将自动转换为int / short / byte并且int将自动转换为short / byte,但不会留下最后一个明显的转换(short to byte)。

这种遗漏是错误还是实际上语言的运作方式?

有没有办法测试这个?

这里是图形

  • long-> int,short,byte
  • int-> short,byte
  • 短期>字节
  • 字节

1 个答案:

答案 0 :(得分:7)

首先,请注意文本正在讨论编译时常量表达式。只允许编译时常量表达式缩小转换。来自language specification, section 5.2

  

此外,如果表达式是byte,short,char或int类型的常量表达式(第15.28节):

     
      
  • 如果变量的类型是byte,short或char,则可以使用缩小的基元转换,并且常量表达式的值可以在变量的类型中表示。
  •   

从编译时常量shortbyte的隐式缩减赋值转换这一事实并不是很明显,因为没有short个字面值;仅限intlong。要获得编译时常量short,您必须使用如下所示的技巧:

// Casting:
byte b2 = (short) 42;

// Compile-time constant short value:
static final short s = 42;
byte b = s;

另一方面,您的讲义还指出,从longint以及较小的整数类型存在隐含的缩小转换。这是不正确的,转换只能在表达式为byteshortcharint时使用。他们用来说明的代码片段会产生编译时错误:

int i = 0x12345678L; /* "error: possible loss of precision" */