ad

阅读《Java核心技术》卷1 基础知识_更了解Java的奥妙_3.6.2 拼接

admin 126 2023-10-25

【摘要】 本书摘自《Java核心技术》一书中第3章,第6节,作者是来自美国的凯·S.霍斯特曼(Cay S.Horstmann),由林琪、苏钰涵等译。

3.6.2 拼接

与绝大多数程序设计语言一样, Java语言允许使用+号连接(拼接)两个字符串。

阅读《Java核心技术》卷1 基础知识_更了解Java的奥妙_3.6.2 拼接

String expletive ="Expletive";

String PG13 ="deleted";

String message = expletive + PG13;

上述代码将"Expletivedeleted" 赋给变量 message (注意,单词之间没有空格,+号完全按照 给定的次序将两个字符串拼接起来)。

当将一个字符串与一个非字符串的值进行拼接时,后者会转换成字符串(在第5章中可 以看到,任何一个Java 对象都可以转换成字符串)。例如:

String rating ="PG"+ age;

将 rating 设置为"PG13"。

这种特性通常用在输出语句中。例如:

System.out.println("The answer is"+ answer);

这是一条合法的语句,并且会打印出所希望的结果(因为单词 is后面加了一个空格,输 出时也会加上这个空格)。

如果需要把多个字符串放在一起,用一个界定符分隔,可以使用静态 join方法: String all = String.join("/","S","M","L","XL");

// all is the string "S /M/L/XL"

在Java 11 中,还提供了一个 repeat 方法:

String repeated ="Java".repeat(3);// repeated is "JavaJavaJava"

3.6.3 不可变字符串

String类没有提供修改字符串中某个字符的方法。如果希望将greeting的内容修改为

"Help!", 不能直接将 greeting 的最后两个位置的字符修改为 'p'和'!'。对于C 程序员来说, 这会让他们茫然无措。如何修改这个字符串呢?在Java中实现这项操作非常容易。可以提取

想要保留的子串,再与希望替换的字符拼接:

greeting = greeting.substring(θ, 3)+"p!";

上面这条语句将 greeting变量的当前值修改为"Help!"。

由于不能修改Java字符串中的单个字符,所以在Java文档中将 String类对象称为是不 可变的 (immutable), 如同数字3永远是数字3一样,字符串"Hello"永远包含字符H、e、1、 1 和o 的代码单元序列。你不能修改这些值,不过,可以修改字符串变量 greeting, 让它引用 另外一个字符串,这就如同可以让原本存放3的数值变量改成存放4一样。

这样做是否会降低运行效率呢?看起来好像修改一个代码单元要比从头创建一个新字符 串更加简洁。答案是:也对,也不对。的确,通过拼接"Hel"和"p!"来创建一个新字符串的 效率确实不高。但是,不可变字符串却有一个优点:编译器可以让字符串共享。

为了弄清具体的工作方式,可以想象将各种字符串存放在公共的存储池中。字符串变量 指向存储池中相应的位置。如果复制一个字符串变量,原始字符串与复制的字符串共享相同 的字符。

总而言之, Java的设计者认为共享带来的高效率远远胜过于提取子串、拼接字符串所带 来的低效率。可以看看你自己的程序,我们发现:大多数情况下都不会修改字符串,而只是 需要对字符串进行比较(有一种例外情况,将来自于文件或键盘的单个字符或较短的字符串 组装成字符串。为此, Java提供了一个单独的类,在3.6.9节中将详细介绍)。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:阅读《Java核心技术》卷1 基础知识_更了解Java的奥妙_4.5 方法参数
下一篇:阅读《Java核心技术》卷1 基础知识_更了解Java的奥妙_4.1 面向对象程序设计概述
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×