在以下示例中
int i = -128;
Integer i2 = (Integer) i; // compiles
Integer i3 = (Integer) -128; /*** Doesn't compile ***/
Integer i4 = (Integer) (int) -128; // compiles
Integer i4 = -128; // compiles
Integer i5 = (int) -128; // compiles
Integer i6 = (Integer) (-128); // compiles
Integer i7 = (Integer) 0-128; // compiles
我不能在(Integer)
中使用-128
,但我可以使用(int) -128
。
我一直认为-128
是int
类型的,用(int)
来转换它应该是多余的。
i3
命令行上的错误是
cannot find symbol variable Integer
我在Java6更新29和Java7更新1中尝试了这一点。
编辑:使用+128
而不是-128
可以获得相同的行为。这似乎是一元运算符和二元运算符之间的混淆。
发布于 2011-10-26 16:19:43
编译器将-
解释为两个参数的减号运算符,即它试图从另一个名为Integer
的数字中减去128,但作用域中没有这样的变量。
这将进行编译:
Integer i3 = (Integer) (-128)
发布于 2011-10-26 16:20:42
这可能与语法分析有关。请注意,
Integer i4 = (Integer) (-128);
工作得很好。
通常,不应强制转换为Integer类。这涉及到所谓的自动装箱,并且可能会在代码中导致一些细微的错误。做你想做的事情的首选方法是:
Integer i6 = Integer.valueOf(-128)
发布于 2011-10-26 16:21:11
它将其解析为Integer <minus operator> 128
,但没有找到变量Integer
。您需要将-128
括在方括号中:
Integer i3 = (Integer) (-128); // compiles
https://stackoverflow.com/questions/7900198
复制相似问题