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

修改字符串

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 的设计者认为共享带来的高效率远远胜过于提取、 拼接字符串所带来的 低效率。查看一下程序会发现:很少需要修改字符串, 而是往往需要对字符串进行比较(有一种例外情况,将来自于文件或键盘的单个字符或较短的字符串汇集成字符串。)

猜你喜欢

转载自blog.csdn.net/weixin_45884316/article/details/107637470