【发布时间】:2016-10-25 07:39:00
【问题描述】:
我认为没有明确的理由发生这种情况..
public class wrappers
{
public static void main(String []args)
{
short s1=32767; // (primitive) works fine without compile error
short s2=32768; fails as this is beyond short's range
Short s3=32767; //(wrapper) works fine without compile error
Short s4=32768; fails as this is beyond short's range
long l1 =34 // (wrapper)works fine (with_in_range)
Long l2 =34 // fails, without 34L (with_in_range)
}
我知道,当您为包装类分配 int 文字时,会调用 valueOf();
对于Short(Wrapper),这似乎可行,但对于Long(wrapper),上述代码中的分配失败。
是否有任何规则来管理这些包装类的分配?
【问题讨论】:
-
您找到了一个不错的角包。我相信,
Short s4 = 32767也不应该工作。无论如何,您可以像这样修复Long的情况:Long l1 = 12L; // capital L。为了记录,这个术语叫做Autoboxing,你可以用谷歌搜索。 -
是的,有规则。他们被称为Java Language Specifications。
-
您没有转换值。就像
int a = 100.1不能编译一样,上面也一样。 -
@TamasRev 我想短距离是 -32768 到 32767,我知道这是自动装箱,这个赋值是 valueOf 的语法糖
标签: java wrapper literals primitive