我可以重新使用更改长度的数组变量吗?

时间:2018-02-24 05:25:41

标签: java arrays

我可以每次使用更改长度的数组变量吗? 喜欢

<ul>
  <li><a>Hover Here</a><span class="hidden">hidden</span></li>
</ul>

我可以像上面那样再次使用Prime吗?可能吗 ?如果你不能给我理由谢谢。

4 个答案:

答案 0 :(得分:1)

您不是在重用相同的数组,而是创建数组对象的新实例。 java数组对象具有固定长度(final int),因此在实例化之后无法更改数组的长度。

答案 1 :(得分:0)

对您的问题的一些解释。 您可以运行以下代码并更好地理解。 由于java无法获取地址,所以这里使用hashcode来显示对象地址。

int[] prime = new int[]{1,2,3,4};
System.out.println(Arrays.hashCode(prime));
System.out.println("prime[0]="+prime[0]);

prime = new int[]{4,3,2,1,0};
System.out.println(Arrays.hashCode(prime));
System.out.println("prime[0]="+prime[0]);


Output like this:
    955331
    prime[0]=1
    1045631
    prime[0]=4

答案 2 :(得分:0)

在分配内存后,无法调整数组大小,因为数组会获得连续的内存块。

   int arr[] = new int[3];

enter image description here

保留内存空间后,无法调整阵列大小,因为下一个连续内存块可能无法使用。您可以创建一个新数组,并将前一个数组的所有元素移动到具有不同大小的新数组。

我建议将ArrayList用于动态数组。如果你遇到任何这种情况。

答案 3 :(得分:0)

两个单独的数组

更改数组的长度。您正在创建第二个数组,与第一个数组分开且不同。

您创建了两个数组,但只使用了一个引用变量(primes)来跟踪它们。当您将第二个数组分配给primes时,第一个数组被遗忘了。第一个数组仍在内存中浮动,如果没有其他引用指向它,则为最终garbage collection的候选者。

ArrayList

如果要调整大小,请使用ListArrayList实现,而不仅仅是数组。您需要存储对象(Integer)而不是基元(int)。 auto-boxing feature in Java可以掩盖差异。

int initialCapacity = 6 ;
ArrayList< Integer > primes = new ArrayList<>( initialCapacity ) ;
primes.add( 7 ) ;  // The primitive `int` 7 literal is automatically converted via autoboxing to be an `Integer` Object.

ArrayList会根据需要自动增加其容量以存储其他项目。

如果您希望释放未分配用于容纳任何对象的额外容量,请致电ArrayList::trimToSize()