是否有任何风险添加原始Int而不是Int对象?

时间:2013-07-01 21:46:32

标签: java list

即使我将列表设置为Long类型,我仍然可以毫无错误地执行此操作。 我应该知道有什么潜在的问题吗?

long num = 12L;
List<Long> list = new ArrayList<Long>();
list.add(num)

4 个答案:

答案 0 :(得分:9)

没有。原始long将自动装箱为Long。

可能导致问题的是反向操作:

 long foo = list.get(0);

这会将Long解包为long,如果null存储在列表中,则会抛出NullPointerException。

答案 1 :(得分:4)

没有问题。在java中有一些叫做Autoboxing的东西。

link可以帮到你。

根据JLS -

  

正如任何Java程序员所知,你不能将int(或其他原始值)放入集合中。集合只能保存对象引用,因此必须将原始值装入适当的包装类(在int的情况下为Integer)。当您从集合中取出对象时,您将获得放入的Integer;如果需要int,则必须使用intValue方法取消对Integer的装箱。所有这些装箱和拆箱都是一种痛苦,并使你的代码变得混乱。自动装箱和拆箱功能可自动完成整个过程,消除了痛苦和混乱。

答案 2 :(得分:2)

  

我应该知道有任何潜在的问题吗?

不,没有任何问题。 Java版本1.5+的编译器将执行自动装箱,以便将long文字转换为Long对象。

但是,在执行自动取消装箱(从Longlong)时应该小心,因为取消装箱null参考将导致{{ 1}}。

例如:

NPE

答案 3 :(得分:1)

这没有问题,因为(现代版本的)Java可以在这种情况下自动在对象和基本类型之间进行转换。它被称为自动拳击。