gpt4 book ai didi

java - 了解 Java 中的类变量

转载 作者:行者123 更新时间:2023-11-30 07:54:03 25 4
gpt4 key购买 nike

以下是来自热门 YouTube 的简单链接列表 video .

public class Link {

public String bookName;
public int millionsSold;

public Link next;

public Link(String bookName, int millionsSold) {
this.bookName = bookName;
this.millionsSold = millionsSold;
}

@Override
public String toString() {
return bookName;
}

public static void main(String[] args) {

LinkList theLinkedList = new LinkList();

theLinkedList.insertFirstLink("Don Quixote", 500);
theLinkedList.insertFirstLink("A Tale of Two Cities", 200);
theLinkedList.insertFirstLink("The Lord of the Rings", 150);
theLinkedList.insertFirstLink("Harry Potter and the Sorcerer's Stone", 107);

theLinkedList.removeLink("A Tale of Two Cities");
System.out.println("\nA Tale of Two Cities Removed\n");
}
}

class LinkList {
public Link firstLink;

LinkList() {
firstLink = null;
}

public void insertFirstLink(String bookName, int millionsSold) {
Link newLink = new Link(bookName, millionsSold);
newLink.next = firstLink;
firstLink = newLink;
}

public Link removeLink(String bookName) {

Link currentLink = firstLink;
Link previousLink = firstLink;

while (currentLink.bookName != bookName) {
if (currentLink.next == null)
return null;
else {
previousLink = currentLink;
currentLink = currentLink.next;
}
}

if (currentLink == firstLink)
firstLink = firstLink.next;
else {
previousLink.next = currentLink.next;
}
return currentLink;
}
}

我无法理解 LinkedList 类的 removeLink 方法。在该方法中执行语句previousLink.next = currentLink.next 后,为什么更改也反射(reflect)在firstLink 变量中?

编辑:

正如评论和回答中所指出的,我理解对象变量是引用变量,多个变量可以引用同一个对象。因此,对任何一个引用变量的值更改也会影响对同一引用的其他变量。

在上面的例子中,在执行previousLink.next = currentLink.next 行后,currentLink 也从firstLink 中移除,因为两者 previousLinkfirstLink 指向同一个对象。同样,当执行 currentLink = currentLink.next 时,为什么它对 firstLink 没有任何影响?

最佳答案

原因是变量只不过是对内存中位置的命名引用。

假设 firstLink 指向内存中的某个 Link 对象

firstLink

然后,当你说

Link currentLink = firstLink;
Link previousLink = firstLink;

您将 currentLinkpreviousLink 指向内存中的同一个对象。现在您对同一个对象有 3 个不同名称的引用。

three links

这意味着,在此赋值之后,除非任何变量指向内存中的另一个位置,否则对其中任何一个的更改将反射(reflect)在其他两个中。

关于java - 了解 Java 中的类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44349955/

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