方法调用中的空,原始数据值和包装类

时间:2015-05-09 03:46:46

标签: java methods null type-conversion primitive-types

我有以下代码段

<select name="" id="">
    <option ng-repeat="p in participants">{{ p.name }}</option>
</select>

我的问题是,

为什么数值总是引用int(基本类型),但是null引用重载中最具体的方法?

为什么我们需要隐含地说1L为什么如果给出大数字(1233333333333)它没有取长期值?  你可以解释一下吗?

2 个答案:

答案 0 :(得分:1)

  

为什么数值总是引用int(原始类型)但是null引用   重载中最具体的方法是什么?

因为默认情况下编译器引用数字的32位整数运算,不带后缀lL (对于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不一致。