gpt4 book ai didi

c# - 如何理解链接时是否复制或引用了对象

转载 作者:太空宇宙 更新时间:2023-11-03 19:42:02 24 4
gpt4 key购买 nike

抱歉,我是编程新手,所以我的描述可能不正确。我设计了一个使用 linkedNode 结构的类:

class test {
public int data,
public test next;
public test(int data){this.data = data;}
}

和主要:

public static void main(){
test t1 = new test(1), t2 = new test(2); //Line 1
t1.next = t2; //Line 2
t2.next = t1; //Line 3
t2 = null; //Line 4
Console.Write(t1.next.next.next.......data) // Line 5
}

所以我的 next() 似乎可以无限期调用,但我很好奇 t2 是如何连接到 t1.next 的?如果 t2 被复制到 t1.next,那么第 3 行将无法使其成为一个循环;如果 t2 仅通过地址链接,则第 4 行将中断循环。所以我很困惑我的代码背后发生了什么?

最佳答案

其实,你的结论都不对。没有创建对象的副本,但第 4 行没有“打破循环”。让我们分解一下:

test t1 = new test(1), t2 = new test(2); //Line 1

这将创建两个“测试”对象,并将它们的引用存储在局部变量中。因为它们每个都有一个值来标识它们(在这个例子中没有改变),我们将它们称为“Thing 1”和“Thing 2”

t1.next = t2; //Line 2

很好。 “Thing 1”的 next 属性现在引用“Thing 2”(从技术上讲,t2value - 对“Thing 2”的引用- 被复制到 t1.next)

t2.next = t1; //Line 3

还是不错的。 “Thing 2”的 next 属性现在引用“Thing 1”(技术上,t1value - 对“Thing 1”的引用- 被复制到 t2.next)

t2 = null; //Line 4

很好。 变量 t2 现在什么也没有指向。这里的主要误解是“Thing 2”没有任何改变。只有引用“事物 2”的变量发生了变化。 “Thing 2”本身不受影响。它仍然有一个引用“Thing 1”的 next 属性。就此而言,“Thing 1”也不受影响。它有一个引用“Thing 2”的 next 属性

 Console.Write(t1.next.next.next.......data) // Line 5

t1 引用“Thing 1”,其 next 属性引用“Thing 2”,其 next 属性引用“Thing 1”,其next 属性引用“Thing 2”等。因此,根据您调用 .next 的次数,结果将是 12

I'm curious that how t2 is connected to t1.next?

直到第 4 行,它们都在引用同一个对象。第 4 行随后更改了 t2 引用的内容(无),但不更改 t1.next 的值。

关于c# - 如何理解链接时是否复制或引用了对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52157973/

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