我有以下代码段
<select name="" id="">
<option ng-repeat="p in participants">{{ p.name }}</option>
</select>
我的问题是,
为什么数值总是引用int(基本类型),但是null引用重载中最具体的方法?
为什么我们需要隐含地说1L为什么如果给出大数字(1233333333333)它没有取长期值? 你可以解释一下吗?
答案 0 :(得分:1)
为什么数值总是引用int(原始类型)但是null引用 重载中最具体的方法是什么?
因为默认情况下编译器引用数字的32位整数运算,不带后缀l
或L
(对于long
)。
为什么我们需要隐含地说1L为什么如果你没有取
long
值 给大号(1233333333333)?你可以解释一下吗?
正如我上面所说,它默认是指整数运算,对于这么大的数字,它超出了Integer
的范围,因为这个数字将被视为整数而没有后缀l
或者L
所以它将引用以int
作为参数的方法,但出现错误的值超出范围。
让我们看看JLS说的是什么......
JLS 4.2
如果移位运算符以外的整数运算符至少有一个 long类型的操作数,然后使用64位执行操作 精度,数值运算符的结果类型为long。 如果另一个操作数不长,则首先将其扩展(第5.1.5节)以进行输入 长期通过数字推广(§5.6)。否则,操作使用32位精度执行,并且 数值运算符的结果是int类型。如果是任一操作数 不是int,它首先通过数字提升扩展为int类型。
答案 1 :(得分:0)
1233333333333是一个int文字,所以你可以使用它,但是你必须将它转换为long,在这种情况下编译器将进行转换。它不起作用,因为它太大而不能成为int。
编译器不能假设它很长的原因是因为它与123是一个int不一致。