簡體   English   中英

不變的字符串和最終關鍵字

[英]Immutable strings and final keyword

我通常將全局編譯時變量(例如我使用的常數,例如avogadro的數字或其他)放入公共靜態最終變量中。 但是,我從未考慮過這是否真的對Strings有作用。 因為String已經是不可變的,所以使String final有什么意義嗎?

這不僅僅是理論問題,而是實際問題。

final不同於不變。 final意味着處理程序(變量)不能指向另一個對象。 不可變意味着對象無法更改其內部狀態。

  • static final Foo foo = new Foo(1)意味着您以后不能再擁有foo = new Foo(2)
  • 如果Foo是不可變的,則意味着一旦創建Foo ,就無法更改其字段。 例如,您不能擁有Foo foo = new Foo(1); foo.setValue(3); Foo foo = new Foo(1); foo.setValue(3);

您正在獲得對該字符串的引用,而實際的字符串卻被混淆了。 不可變描述了實際的字符串對象,這意味着您無法更改該對象的值。 Final引用了對字符串對象的引用,這意味着您無法更改引用所指向的字符串。 考慮以下代碼:public static String str =“ happy”; ... str =“悲傷”;

此代碼創建兩個字符串對象,一個包含值“ happy”,一個包含值“ sad”。 這些對象(因為字符串是不可變的)均不能更改。 str是一個引用,可以指向這些對象中的任何一個; 但是,我們是否將代碼的第一行更改為:public static final String str =“ happy”; str =“ sad”將不再合法。 由於我們已將str更改為最終變量,因此無法使其指向不同的對象。

final僅適用於參考。 如果聲明一個Object final,則並不意味着不能更改該對象,而是不允許引用要更改的對象。 這與不變是不同的。

暫無
暫無

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

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