Java 1.1.3 修改字符串、不可變字符串

 2023-10-21 阅读 18 评论 0

摘要:修改字符串 String類沒有提供用于修改字符串的方法。如果希望將 greeting 的內容修改為“ Help!”, 不能直接地將 greeting的最后兩個位置的字符修改為 ‘ p’ 和 ‘ ! 。這對于 C 程序員來說,將會感到無從下手 。如何修改這個字符串呢? 在 Java中

修改字符串

String類沒有提供用于修改字符串的方法。如果希望將 greeting 的內容修改為“ Help!”, 不能直接地將 greeting的最后兩個位置的字符修改為 ‘ p’ 和 ‘ ! 。這對于 C 程序員來說,將會感到無從下手 。如何修改這個字符串呢?

在 Java中實現這項操作非常容易。
首先提取需要的字符, 然后再拼接上替換的字符串:

greeting = greeting.substring(0, 3) + "p!"; 
//上面這條語句將 greeting 當前值修改為“ Help !”。 

稱為不可變字符串

??由于不能修改 Java 字符串中的字符, 所以在 Java 文檔中將 String類對象稱為不可變字符串, 如同數字 3 永遠是數字 3—樣,字符串“ Hello” 永遠包含字符 H、 e、1、1 和 o 的代碼單元序列, 而不能修改其中的任何一個字符。當然, 可以修改字符串變量 greeting,讓它引用另外一個字符串, 這就如同可以將存放 3 的數值變量改成存放 4一樣。

這樣做是否會降低運行效率呢?

??看起來好像修改一個代碼單元要比創建一個新字符串更 加簡潔。答案是:也對,也不對。
??的確, 通過拼接“ Hel” 和“ p!” 來創建一個新字符串的 效率確實不高。但是,不可變字符串卻有一個優點:編譯器可以讓字符串共享。

??為了弄清具體的工作方式,可以想象將各種字符串存放在公共的存儲池中。字符串變量 指向存儲池中相應的位置。如果復制一個字符串變量, 原始字符串與復制的字符串共享相同 的字符。

??總而言之,Java 的設計者認為共享帶來的高效率遠遠勝過于提取、 拼接字符串所帶來的 低效率。查看一下程序會發現:很少需要修改字符串, 而是往往需要對字符串進行比較(有一種例外情況,將來自于文件或鍵盤的單個字符或較短的字符串匯集成字符串。)

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/153290.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息