修改字符串

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

Java 1.1.3 修改字符串、不可变字符串相关推荐

  1. OC不可变字符串和可变字符串(1)

    在OC中,字符串有:不可变字符串(NSString).可变字符串(NSMutableString). 可变字符串的方法继承于不可变字符串. 可变字符串 1.初始化一个字符串对象(除以下方法外,还可以使 ...

  2. Objective-C学习笔记2013[NSString]字符串[可变字符串中,加用app减用delete]

    Objective-C学习笔记 小常识: NS是Cocoa类对象类型的前缀,来源于史蒂夫-乔布斯被苹果开除那段时间建立的公司NeXT. @是Cocoa元素的前缀,很多地方我们会看到,比如接下来... ...

  3. Java · 认识 String 类(上)· 创建字符串 · 字符串比较相等 · 字符串常量池 · 字符串不可变 · 字符字节与字符串

    目录 一.创建字符串 二.字符串比较相等 三.字符串常量池 3.1 直接赋值的内存情况 3.2 采用构造方法的内存情况 四.理解字符串不可变 五.字符.字节与字符串 5.1 字符与字符串 5.2 字节 ...

  4. [Java]_[初级]_[使用正则高效替换字符串的多个占位符为多个值]

    场景 在开发基于模板内容的Java程序时, 比如一个邮件内容模板,在内容里放置一些占位符$email,$name等来作为替换实际内容的符号.那么这时候如何做才可以少生成不必要的String字符串,从而 ...

  5. JAVA day13,14 API、Object类、日期时间类(long,Date,Calendar,DateFormat)、String类(字符串,可变长字符串)、正则表达式、包装类

    1.API API(Application Programming Interface),应⽤程序编程接⼝.Java API是⼀本程序员的"字 典",是JDK提供给我们使⽤的类的说 ...

  6. Java系列(34)——可变字符串

    本系列博客汇总在这里:Java系列_汇总 目录 一.StringBuffer 概述 二.StringBuffer 和 String 的区别 三.StringBuffer 的 append 方法 四.可 ...

  7. 八门神器java版本_【修改教程】java基础知识字符串处理_八门神器

    [Java基础知识]字符串处理1.获取字符串的长度 String s = "AIDE"; System.out.println(s "长度为:" s.lengt ...

  8. 如何给女朋友解释为什么Java里面的String对象是不可变的?

    点击关注公众号,Java干货及时送达 String的不变性 String在Java中特别常用,相信很多人都看过他的源码,在JDK中,关于String的类声明是这样的: public final cla ...

  9. Java 中的 String 真的是不可变的吗

    转载自   Java 中的 String 真的是不可变的吗 我们都知道 Java 中的 String 类的设计是不可变的,来看下 String 类的源码. public final class Str ...

最新文章

  1. 使用FPM快速生成RPM包
  2. 正则表达式,解决要么有要有没有,但必须开头
  3. php判断单向链表中有没有环,python判断链表是否有环的实例代码
  4. saxparser_使用SaxParser和完整代码进行XML解析
  5. 论文浅尝 | 面向单关系事实问题的中文问答模型
  6. EMR StarRocks 极速数据湖分析原理解析
  7. 07树莓派下的浏览器
  8. 介绍struct bus_type非常好的
  9. math、numpy、pandas NaN 判断
  10. matlab转变图像位深,[转载]matlab 图像处理命令 (转)
  11. python修复不了_python-如何修复cm.spectral(模块“ matplotlib.cm”...
  12. 如何快速调出软键盘_*小星推荐*—如何快速的制作模具3D装配档
  13. [转载]JSONP跨域的原理解析
  14. 改变了的Windows MediaPlayer9.0SDK控制集
  15. ML--HMM(隐马尔可夫模型及python的实现1)
  16. 自定义流程gooflow.08 demo在线演示
  17. 【专升本计算机】计算机权威复习题(基础知识、操作系统、计算机网络)
  18. Ti的C28x系列的DSP(28069)(28377D)使用经验,CMD文件
  19. ROVIO mobile webcam 路威机器人
  20. namesilo修改域名服务器,Namesilo, godaddy和万网域名修改NS的方法

热门文章

  1. [Java] HttpClient有个古怪的stalecheck选项
  2. 多伦多大学密西莎加计算机科学,解析加国名校多伦多大学密西沙加校区
  3. 帆软报表(FineReport) 的初步学习和使用
  4. 任务计划程序设置软件在电脑重启后启动
  5. Android 中Base64的操作
  6. 获取元素在文档上的正确坐标
  7. 判断操作系统类型的多种方法
  8. 【恋上数据结构】递归(函数调用过程、斐波那契数列、上楼梯、汉诺塔、递归转非递归、尾调用)
  9. Mysql修改数据库密码的几种方法
  10. 7z命令行参数详解--python暴破压缩文件命令必备