gpt4 book ai didi

java - 这个数组变量引用是如何起作用的?

转载 作者:行者123 更新时间:2023-12-01 06:37:20 25 4
gpt4 key购买 nike

我想知道这样的事情是如何运作的。

int[] a = {5, 3, 4};

int[] b = {3, 4, 5};

a = b;

这是否意味着a现在将引用b。那么如果我执行a[0],它将是3

如果是这种情况,旧数组中的项目会发生什么?

最佳答案

Does this mean that a will now reference b. So if I do a[0] it will be 3?

有点。 a 不引用 b (变量),它引用 b 引用的同一个数组。 ab 之间没有任何联系,只是它们都引用同一个数组(在 a = b 赋值之后)。

Also if this is the case what happens to the items in the old array?

旧数组符合垃圾回收条件,因为没有任何内容再引用它。由于它是一个原始值数组,因此这些项是数组的一部分,因此对数组进行 GC 本质上意味着对项进行 GC。

在内存中,最初你有:

              +−−−−−−−−−+a:Ref33423−−−>| (Array) |              +−−−−−−−−−+              | 5       |              | 3       |              | 4       |              +−−−−−−−−−+              +−−−−−−−−−+b:Ref54687−−−>| (Array) |              +−−−−−−−−−+              | 3       |              | 4       |              | 5       |              +−−−−−−−−−+

然后在a = b;之后,你有:

              +−−−−−−−−−+              | (Array) |              +−−−−−−−−−+              | 5       |              | 3       |              | 4       |              +−−−−−−−−−+a:Ref54687−−+            |            |  +−−−−−−−−−+            +−>| (Array) |            |  +−−−−−−−−−+            |  | 3       |b:Ref54687−−+  | 4       |               | 5       |               +−−−−−−−−−+

...最终 GC 将删除该孤立数组:

a:Ref54687−−+            |            |  +−−−−−−−−−+            +−>| (Array) |            |  +−−−−−−−−−+            |  | 3       |b:Ref54687−−+  | 4       |               | 5       |               +−−−−−−−−−+
<小时/>

我应该注意,如果它是一个对象数组,则该数组和该数组引用的每个对象可能有不同的生命周期,对数组进行 GC 并不一定意味着对象其中是 GC 的(这取决于其他任何东西是否引用了它们)。

关于java - 这个数组变量引用是如何起作用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58481089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com