上下文:我正在制作一個小型解釋器式計算器。我認為保存符號表的最佳方法是創建一個我定義的對象的 ArrayList(對象的名稱是 WiP)。設置 ArrayList 看起來像。ArrayList<miniVariable> vList = new ArrayList<miniVariable>();足夠簡單,miniVariable對象包含以下變量 public String name; public double value; public boolean initialized;它們是公開的,因為我已經使用 ArrayList 在類中創建了 setter/getter,當時我沒有意識到你可以創建一個對象,而且我不想把所有東西都移過去。我大概應該。問題:如果我調用vList.get(index) .value = 5;它實際上會改變存儲在vList(index)'svalue變量中的值嗎?或者.get(index)只是返回數據的副本,因此更改此副本實際上并沒有做任何事情?
3 回答

侃侃爾雅
TA貢獻1801條經驗 獲得超16個贊
您存儲在 中的ArrayList
不是對象本身,而是對對象的引用。
因此,當您這樣做時,vList.get(i)
它會返回您之前放入的引用。這意味著您將訪問之前放入列表中的同一個對象,而不是它的副本。
讓自己熟悉 Java 的基本概念之一,即引用和原始類型。
一些題外話的建議:
確保您了解 Java 的命名約定。例如,對于類名,它應該是
MiniVariable
而不是miniVariable
。更準確地說:“并且 miniVariable 對象包含以下變量”,
MiniVariable
是一個類,而不是一個對象。您可能會說“并且一個 MiniVariable 對象(實例)包含這些成員字段”,或者“在 MiniVariable 類中定義了以下成員字段”

12345678_0001
TA貢獻1802條經驗 獲得超5個贊
正如人們所期望的那樣,它會更改原始實例上的值。
在 Java 中創建對象的副本只會顯式地發生(并且通常會遇到一些困難)。
其他一些注意事項:
中的類名應該是
CapitalCase
.在持有對象列表的對象上實現 getter 和 setter 是不好的做法,因為它違反了封裝。如果您正在實現 getter 和 setter,最好將它們放在它們適用的類中。
添加回答
舉報
0/150
提交
取消