Java Primitive Gotchas

时间:2014-03-13 12:26:25

标签: java compiler-construction primitive-types

Java编译器有许多特殊的行为,人们往往偶然发现它与原语的处理有关 - 但这往往是一个已知的未知,一个人偶然发现。

例如

long i = 10000000000000;

生成编译器错误,因为它没有检查数字是否被分配给long,具体而言,解决这种情况的唯一方法是编写

long i = 10000000000000l;

有点类似

float f = 10.1;

编译器需要双重

时会产生编译器错误
float f = 10.1f; 

是必需的。

虽然扩大原则是显而易见的,但首先评估方程右侧的其他含义仍然存在。

short a = 2;
short b = 2;
short c = a*b;

还会生成编译器错误,因为Java会自动将乘法短路提升为整数。

是否有人有任何类似的问题要添加到这些 - 或在其他地方编译的一些详尽的列表可能会阻止开发人员通过反复试验来学习这些?

1 个答案:

答案 0 :(得分:1)

与您的示例非常相似,但字节已签名,因此您必须说

byte a = (byte)0xFF;
byte b = (byte)0xF0;

但是,令人恼火的是,这个没问题

byte c = 0x0F;

还有byte & byte = int,因此:

byte d = (byte)(a & b);

这可能会使比特笨拙的操作比你期望的更加尴尬。