对于列表<;长期>;在Java中,在添加原语之前是否必须将其转换为long?

对于列表<;长期>;在Java中,在添加原语之前是否必须将其转换为long?,java,list,arraylist,casting,Java,List,Arraylist,Casting,如果您有列表,是否必须将原语Long转换为Long 你一定要这么做吗 long l=-1; 列表。添加((长)l) 或将 list.add(l) 请注意不要引起任何异常/错误?我假设您的java版本>1.5,因为您使用了通用列表 在您的例子中,list.add(l)将起作用 不要害怕在本地机器上尝试这些东西 阅读这里的更多信息:不,您不需要,int原语将是没有必要将原语类型long强制转换为对象包装类long编译器会处理它。这叫做自动装箱 正如JavaDoc所说:自动装箱是Java编译器在原语类

如果您有
列表
,是否必须将原语Long转换为Long

你一定要这么做吗

long l=-1;
列表。添加((长)l)

或将

list.add(l)


请注意不要引起任何异常/错误?

我假设您的java版本>1.5,因为您使用了通用列表

在您的例子中,
list.add(l)将起作用

不要害怕在本地机器上尝试这些东西


阅读这里的更多信息:

不,您不需要,
int
原语将是

没有必要将原语类型
long
强制转换为对象包装类
long
编译器会处理它。这叫做自动装箱

正如JavaDoc所说:自动装箱是Java编译器在原语类型与其对应的对象包装类之间进行的自动转换。例如,将int转换为整数,将double转换为double,等等。如果转换方向相反,则称为取消装箱。。请

考虑以下代码:

List<Integer> list = new ArrayList<>();
for (int i = 1; i < 50; i += 2)
    list.add(i);
List List=new ArrayList();
对于(int i=1;i<50;i+=2)
列表.添加(i);
尽管将int值作为基本类型而不是整数对象添加到列表中,但代码仍可以编译。因为list是整数对象的列表,而不是int值的列表,所以您可能想知道为什么Java编译器没有发出编译时错误。编译器不会生成错误,因为它从i创建一个整数对象,并将该对象添加到列表中。因此,编译器在运行时将以前的代码转换为以下代码:

List<Integer> list = new ArrayList<>();
for (int i = 1; i < 50; i += 2)
    list.add(Integer.valueOf(i));
List List=new ArrayList();
对于(int i=1;i<50;i+=2)
列表.添加(整数.值(i));

当你尝试它时会发生什么?来吧,尝试肯定比问要快?如果你需要知道为什么我们不需要强制转换,那么请阅读有关自动装箱和自动取消装箱的内容。你需要学习java中的原语、包装类、自动装箱和取消装箱。我知道包装类,但我不知道有自动装箱和拆箱这样的事情,谢谢!