第 8 章 文本和核心实用程序 文本和核心实用程序
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
如果您一直在按顺序阅读本书,那么您已经阅读了有关 Java 语言核心结构的所有内容,包括该语言的面向对象方面和线程的使用。现在是时候换个角度,开始讨论组成标准 Java 包的类集合,这些类集合与每个 Java 实现都是配套的。Java 的核心包是其最显著的特征之一。许多其他面向对象语言也有类似的特点,但没有一种语言像 Java 一样拥有如此广泛的标准化类和工具集。这既是 Java 成功的体现,也是 Java 成功的原因。
弦乐
我们将从 开始,仔细了解 JavaString 类(或者更具体地说,java.lang.String )。由于使用String是非常基本的,因此了解它们是如何实现的以及可以用它们做什么非常重要。String 对象封装了Unicode 字符序列。在内部,这些字符存储在一个普通的 Java 数组中,但String 对象会严密保护这个数组,只允许您通过自己的 API 访问它。这样做是为了支持String是不可变的;一旦创建了String 对象,就不能更改其值。对String 对象的许多操作看似改变了字符串的字符或长度,但实际上只是返回一个新的String 对象,该对象复制或内部引用了原始对象所需的字符。Java 实现努力将同一类中使用的相同字符串合并到共享字符串池中,并尽可能共享Strings 的部分内容。
这一切的最初动机是性能。不可变Strings 可以节省内存,Java 虚拟机可以优化它们的使用以提高速度。但它们并不神奇。您应该对String 类有基本的了解,以避免在性能有问题的地方创建过多的String 对象。1
构建字符串
在源代码中定义的字面字符串 用双引号声明,并可分配给String 变量:
Stringquote="To be or not to be";
Java 会自动将字面字符串转换为String 对象,并将其赋值给变量。
String会记录自己的长度,因此 Java 中的String 对象不需要特殊的终止符。您可以使用length() 方法获取String 的长度。您还可以使用isEmpty() 测试零长度字符串:
intlength=quote.length();booleanempty=quote.isEmpty();
Strings 可以利用中唯一的重载操作符(+ 操作符)进行字符串连接。下面两行产生了等价字符串:
Stringname="John "+"Smith";// or, equivalently:Stringname="John ".concat("Smith");
对于比姓名更大的文本块,Java 13 引入了文本块。通过使用三个双引号来标记多行文本块的开始和结束,我们可以轻松地存储一首诗。这一功能甚至可以巧妙地保留前导空格:最左边的非空格字符成为左 "边"。后续行中该边缘左侧的空格将被忽略,但该边缘之后的空格将被保留。考虑用jshell 重做我们的诗:
jshell> String poem = """ ...> Twas brillig, and the slithy toves ...> Did gyre and gimble in the wabe: ...> All mimsy were the borogoves, ...> And the mome raths ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access