亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Java 字符串是不可變的。到底是什么意思?

瀏覽:109日期:2024-04-14 13:32:58
如何解決Java 字符串是不可變的。到底是什么意思??

在進一步探討不變性之前,讓我們String在得出任何結論之前先了解一下類及其功能。

這是如何String工作的:

String str = 'kNowledge';

與往常一樣,這將創建一個包含的字符串”kNowledge”并為其指定一個reference str。很簡單?讓我們執行更多功能:

String s = str; // assigns a new reference to the same string 'kNowledge'

讓我們看看下面的語句是如何工作的:

str = str.concat(' base');

這會將一個字符串附加' base'到str。但是,等等,由于String對象是不可變的,這怎么可能呢?令你驚訝的是。

當執行以上語句時,VM接受的值String str,即'kNowledge'和' base',為我們提供值'kNowledge base'。現在,由于Strings是不可變的,因此VM無法將此值分配給str,因此它創建了一個新String對象,為其提供了一個值'kNowledge base',并為其提供了一個引用str。

這里要注意的重要一點是,盡管String對象是不可變的,但其引用變量卻不是。這就是為什么在上面的示例中,引用是指新形成的String對象。

至此,在上面的示例中,我們有兩個String對象:第一個對象是我們用value創建的,'kNowledge'由指向s,第二個對象是'kNowledge base'由指向str。但是,從技術上講,我們有三個String對象,第三個對象'base'是concat語句中的文字。

有關字符串和內存使用情況的重要事實如果沒有其他參考s該”kNowledge”怎么辦?我們會失去那個String。但是,它仍然存在,但由于沒有參考文獻而被認為丟失。再看下面的一個例子

String s1 = 'java';s1.concat(' rules');System.out.println('s1 refers to '+s1); // Yes, s1 still refers to 'java'

發生了什么:

第一行非常簡單:創建一個新的String 'java'并引用s1它。接下來,VM創建另一個new String 'java rules',但沒有任何引用。因此,第二個String瞬間丟失。我們無法達到。參考變量s1仍然引用原始變量String 'java'。

應用于String對象以對其進行修改的幾乎每種方法都會創建新String對象。那么,這些String物體在哪里呢?嗯,這些存在于內存中,任何編程語言的主要目標之一就是有效利用內存。

隨著應用程序的增長,文字通常String會占用很大的內存區域,這甚至可能導致冗余。因此,為了提高Java的效率,JVM預留了一個特殊的內存區域,稱為“字符串常量池”。

當編譯器看到String文字時,它將String在池中查找。如果找到匹配項,則對新文字的引用將指向現有文件,String并且不會String創建新對象。現有的String只是另外一個參考。這是使String對象不可變的要點:

在String常量池中,一個String對象可能具有一個或多個引用。如果幾個引用指向同一對象String甚至不知道它,那么如果其中一個引用修改了該String值,那將是不好的。這就是為什么String對象是不可變的。

好吧,現在你可以說,如果有人重寫了String類的功能怎么辦?就是這樣的原因的String類被標記final,這樣沒有人可以凌駕于其方法的行為。

解決方法

我在不可變字符串上編寫了以下代碼。

public class ImmutableStrings { public static void main(String[] args) {testmethod(); } private static void testmethod() {String a = "a";System.out.println("a 1-->" + a);a = "ty";System.out.println("a 2-->" + a); }}

輸出:

a 1-->a a 2-->ty

此處變量的值a已更改(許多人說不能更改不可變對象的內容)。但是,一句話到底是什么String是不變的呢?

標簽: java
相關文章:
主站蜘蛛池模板: 国产黄色片在线免费观看 | 日韩在线视频免费播放 | 国产在线观看网址在线视频 | 亚洲特黄大黄一级毛片 | 尤物蜜芽福利国产污在线观看 | 精品一区亚洲 | 欧美精品第1页在线播放 | 亚洲国产欧美日韩 | 小泽玛利亚在线精品一区二区 | 国产精品人人爱一区二区白浆 | 久久精品国产99国产精品亚洲 | 99久久综合狠狠综合久久aⅴ | 亚洲第一成年人网站 | 久久久一区二区三区 | 国产成人www免费人成看片 | 日本精品久久久一区二区三区 | 99视频在线观看高清 | 亚洲精品福利视频 | 国产精品综合一区二区 | 一区二区三区免费视频 www | 任我爽在线视频精品凹凸精品分类 | 男女啪啪免费观看网站 | 1769视频在线观看国产 | 手机看片福利日韩 | 国产区视频 | 黄色一级片美国 | 黄色一级视屏 | 国产福利午夜自产拍视频在线 | 免费碰碰视频 | aa黄色| 亚洲视频在线观看网址 | 精品一久久香蕉国产二月 | 国产精品区网红主播在线观看 | 亚洲一级黄色毛片 | 成人三级在线播放 | 国产精品亚洲欧美大片在线看 | 欧美69视频在线 | 性 色 黄 一级| 国内自拍网红在综合图区 | 国产在线看不卡一区二区 | 91preon国产在线观看 |