无法向<long> ArrayList添加整数

时间:2017-10-04 05:31:38

标签: java arraylist

我创建了一个ArrayList:

import java.util.Scanner;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Arrays;
class Main{
    static ArrayList<Long> fibo_list=new ArrayList<Long>();
    static int current_index;
    public static void main(String args[]){
        fibo_list.add(0);
        fibo_list.add(1);
        fibo_list.add(1);

三个fibo_list.add()抛出相同类型的错误。这是第一个:

error: no suitable method found for add(int)
    fibo_list.add(0);
             ^
method ArrayList.add(int,Long) is not applicable
  (actual and formal argument lists differ in length)
method ArrayList.add(Long) is not applicable
  (actual argument int cannot be converted to Long by method invocation conversion)
method AbstractList.add(int,Long) is not applicable
  (actual and formal argument lists differ in length)
method AbstractList.add(Long) is not applicable
  (actual argument int cannot be converted to Long by method invocation conversion)
method AbstractCollection.add(Long) is not applicable
  (actual argument int cannot be converted to Long by method invocation conversion)

现在它的工作原理如下:

fibo_list.add((long)0);
fibo_list.add((long)1);
fibo_list.add((long)1);

但为什么它没有隐含地施展自己?

3 个答案:

答案 0 :(得分:1)

当您尝试以下代码时:

fibo_list.add(0);
fibo_list.add(1);
fibo_list.add(1);

您正在尝试将原始整数值添加到Long个对象的集合中。这不起作用,也不会装箱这些值,这会产生Integer。这也失败了,因为Integer无法存储在Long的集合中。但是,以下代码可以工作:

fibo_list.add(0L);
fibo_list.add(1L);
fibo_list.add(1L);

这里我们传递原始long值,然后可以将其加到Long

答案 1 :(得分:1)

这里需要应用装箱转换,因为列表包含盒装基元,而不是基元。

此转换在JLS Sec 5.1.7

中有所描述
  

拳击转换将基本类型的表达式转换为引用类型的相应表达式。具体来说,以下九个转换称为装箱转换:

     
      
  • ...
  •   
  • 从int类型到Integer类型
  •   
  • 从long类型到Long
  •   
  • ...
  •   

但是没有拳击转换“从int到类型Long”。因此,无法应用此方法调用,因此它是编译器错误。

显式转换为long,使用Long.valueOf(intValue)显式框(其中扩展转换将int参数转换为long),或使用{{1文字上的后缀。

答案 2 :(得分:0)

你在施法和拳击之间感到困惑。

当int转换为Integer时 - 它被称为boxing并且revrese进程被称为unboxing。

JAVA支持自动装箱,这意味着你的原语会在需要时自动转换为它的包装类。反之亦然。 E.g int - &gt;整数,长 - &gt;等等。

Java还支持在基元之间进行转换,这意味着可以将int基元隐式转换为长基元。

您要实现的目标是上述操作的组合。你想将int转换为Long,这将需要2个步骤,这可以通过2种不同的方式实现(让我们假设一会儿就可以了):

方式1:

  1. 将int强制转换为long
  2. 拳击长到长
  3. 方式2:

    1. 将int装入整数
    2. 将Integer强制转换为Long
    3. 由于没有明确的选择方式,因此JAVA不允许任何两步流程作为自动转换。