java - Arrays.fill() 和用于初始化链表数组的 for 循环之间的区别

标签 java arrays

为什么这会给出不同的输出。

LinkedList<Integer> blocked [] = new LinkedList[n+1];
int obstacles [][]= {{5, 5},{4 ,2},{2 ,3}};

CASE 1: Arrays.fill(blocked, new LinkedList<Integer>());
System.out.println(blocked);  

OUTPUT :  
[5, 2, 3]
[5, 2, 3]
[5, 2, 3]
[5, 2, 3]
[5, 2, 3]

CASE 2:  for(int i=0;i<=n;i++)
         blocked[i]= new LinkedList<Integer>();
OUTPUT : []
         [3]
         []
         [2]
         [5]

为什么它的工作方式不同,在 arrays.fill 中使用新的链表是否发送相同的对象引用?

最佳答案

以下是您正在使用的 Arrays.fill() 的代码:

public static void fill(Object[] a, Object val) {
    for (int i = 0, len = a.length; i < len; i++)
        a[i] = val;
}

所以答案是肯定的,它使用相同的对象实例来填充数组。

关于java - Arrays.fill() 和用于初始化链表数组的 for 循环之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53628820/

相关文章:

php - laravel 如何访问表的编号名称的列?

java - 反转数组中的元素,并使用单个 for 循环将反转后的元素压入堆栈

javascript - 如何处理循环内的异步调用?

c - 使用指针打印二维数组时出错

c# - 将一个数组中数字的频率写入另一个数组

java - 如何从服务器套接字读取unicode字符

java - JAX-WS(TomEE) Web 服务构造函数仅运行一次

java - 如何使用 Jsoup 和/或正则表达式 Java 从 URL 中删除 html 标签

java - 与 argThat 匹配仅适用于具有单个参数的方法吗?

java - Hibernate 与空列表比较?