簡體   English   中英

我們可以說指向不變對象的參考變量是常量嗎?

[英]Can we say that the reference variable pointing to an immutable object is a constant variable?

我有一個疑問從一個答案在計算器到以下問題:

以下代碼創建了多少個String對象?

String x = new String("xyz");
String y = "abc";
x = x + y; 

在斯蒂芬的回答中,他提到x和y不是常數。

我的疑問-字符串是一個最終類,並且它的實例將是一個常量,因為字符串是一個不可變的類。 為什么此常量類的引用變量不是常量變量? -我確實同意斯蒂芬的觀點,因為x = x + y; 指向在堆內存中創建的“ xyzabc”。

您需要了解一些概念。

將一個類標記為final不會使它不變。 它只是使其不可繼承。

JLS§8.1.1.2

如果一個類的定義完整並且不需要或不需要子類,則可以將其聲明為final。

如果最終類的名稱出現在另一個類聲明的extends子句(第8.1.4節)中,則是編譯時錯誤。 這意味着最終類不能有任何子類。

當初始化后無法更改其存儲的值時,該類被稱為不可變的。

常數變數是標有final的變數。

JLS§4.12.4

可以將變量聲明為final。 最終變量只能分配一次。 聲明變量final可作為有用的文檔,其值不會改變,並有助於避免編程錯誤。

如果將最終變量賦值給它,則是編譯時錯誤,除非在賦值之前肯定未賦值(第16節)。

xy此處不是常量,因為它們未標記為final 就是這樣

“但是字符串不能改變,所以它們是常量,對嗎?” 你可能會問。

String對象本身不能更改,但字符串變量可以更改。 我會給你看:

String s = "Hello";
s = "Goodbye";

更改變量的值,使其引用另一個字符串。 原始字符串“ Hello”未更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM