gpt4 book ai didi

java - 如何在 Java 中创建指向引用变量的指针变量?

转载 作者:行者123 更新时间:2023-11-30 08:19:43 26 4
gpt4 key购买 nike

我想创建一个指向不同引用变量指向的任何变量,这样如果我更改引用变量指向的位置,指针变量也会自动指向那个新位置。

例如,假设我认为我最喜欢的书是我本地图书馆最喜欢的书。如果我的图书馆改变了他们最喜欢的书是什么,我会自动认为那是我最喜欢的书。

下面是一些代码来证明我的意思:

Book littleWomen = new Book("Little Women");
Book dracula = new Book("Dracula");

Book libraryFavourite = litteWomen;
Book myFavourite = libraryFavourite; //myFavoutie is now littleWomen

libraryFavourite = dracula; //i want myFavourite to update to point to dracula, now.

在上面的代码中,更改libraryFavourite 指向的内容不会自动更改myFavourite 指向的内容。它一直指向 littleWomen

我明白为什么上面的代码不起作用,因为我说我“想要”它。我知道引用变量保存内存地址,因此 myFavourite = libraryFavourite 只是将 libraryFavourite 指向的内存地址分配给 myFavourite,因此 future 对 libraryFavourite 的更改不会更改 myFavourite。我只包含上面的代码来帮助阐明我想要的行为,但我明白我需要一种不同的方法来实现。

This link 讨论了给类起别名的问题(收到的答案基本上是无法完成)。但是,别名并不是我想要做的,因为我想自由地更改 myFavourite 以停止指向图书馆最喜欢的书,而是指向其他东西(例如,一些我新发现并爱上的新书)。

最佳答案

要实现这样的行为,您必须将引用存储在对象中而不是本地值中。它永远不会像您期望的那样工作。变量只是指向对象,如果你改变它,你只是让它指向不同的对象——你不能改变根对象!

Favorite libraryFavorite = new Favorite(littleWomen);
Favorite myFavorite = libraryFavorite;

libraryFavorite.set(dracula);

//now myFavorite.get also points to dracula

而 Favorite 只是一个引用持有者:

public class Favorite {
private Book book;

public Favorite(Book book) {
this.book = book;
}

public void set(Book newBook) {
this.book = newBook;
}

public Book get() {
return book;
}
}

关于java - 如何在 Java 中创建指向引用变量的指针变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26599302/

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