我想知道在Java中运行时list.add()是如何在内部工作的。

7 浏览
0 Comments

我想知道在Java中运行时list.add()是如何在内部工作的。

在编写声明简单数组并将其添加到列表的代码时,我有一个问题。\n

   int[] value = new int[]{1, 2, 3};
   List arrayToList = new ArrayList<>();
   for (int number : value) {
       arrayToList.add(number);
   }

\n我想知道list.add()在内部是如何工作的。\n如果每个元素都使用\"new\"关键字来创建一个实例。\n如果不是,我想知道是否使用了Integer.valueOf()。\n总结一下,每个数组元素都是原始类型。\n我想知道它在内部是如何工作并将其转换为引用类型的。

0
0 Comments

问题的原因是对于Java中的List的add()方法的内部运行机制不清楚,想要了解它是如何在运行时工作的。

解决方法是通过阅读和分析相关的代码和解释,来理解add()方法的内部运行机制。

下面的内容可以整理成一篇文章:

Java中的List的add()方法是用来向列表中添加元素的。它接受一个对象作为输入,并将其添加到列表中。add()方法的参数类型是Object类型,即它可以接受任何对象作为输入。这意味着无论你传递什么类型的包装类对象,它都会被添加到列表中。

在Java中,有一种叫做自动装箱(autoboxing)的机制。它是指当你将一个基本类型转换为其对应的包装类时,会自动进行类型转换。在OP的例子中,我们可以看到自动装箱的应用。虽然OP没有问为什么它起作用,而是问它是如何起作用的,但是这里还是需要解释一下为什么它起作用。自动装箱只是在你将基本类型转换为包装类时发生的一种隐式转换。

另外,需要注意的是,List的add()方法的参数类型取决于泛型类型E。如果List没有指定泛型类型,那么它将被视为原始类型(raw type),在这种情况下,add()方法可以接受任何类型的对象作为参数。但是OP并没有使用原始类型的List。

,Java中的List的add()方法是用来向列表中添加元素的。它接受一个对象作为输入,并将其添加到列表中。无论你传递什么类型的包装类对象,它都会被添加到列表中。这是因为Java中有自动装箱的机制,可以在基本类型和其对应的包装类之间进行隐式转换。同时,需要注意的是,List的add()方法的参数类型取决于泛型类型E,而不是所有类型的对象都可以作为参数传递给add()方法。

0
0 Comments

在Java中,当我们将一个基本类型的变量赋值给对应的包装类时,会发生自动装箱(Autoboxing)。自动装箱的过程可以从这里了解更多关于int如何转换为Integer的信息:Why is int changed to Integer automatically in java?

如果你想要了解ArrayList.add()方法在运行时的内部工作原理,可以从这里查看源代码:http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/tip/src/share/classes/java/util/ArrayList.java

public boolean add(E e) {
    ensureCapacityInternal(size + 1);  // Increments modCount!!
    elementData[size++] = e;
    return true;
}

这里还有另一个stackoverflow的回答,直接讨论了自动装箱过程中发生了什么(基本上使用了Integer.valueOf(int i)方法)。

0