文字块:怎么编写所见即所得的字符串

文字块的概念很简单,它是一个由多行文字构成的字符串。

出现在文字块开始和结束位置的,是三个双引号序列;而不是我们在字符串声明里看到的单个双引号。 文字块由零个或多个内容字符组成,从开始分隔符开始,到结束分隔符结束。

开始分隔符是由三个双引号字符 (""") ,后面跟着的零个或多个空格,以及行结束符组成的序列。结束分隔符是一个由三个双引号字符 (""") 组成的序列。

结束分隔符只有一个由三个双引号字符组成的序列。结束分隔符之前的字符,包括换行符,都属于文字块的有效内容。

js 复制代码
jshell> String s = """
   ...> OneLine""";
s ==> "OneLine"



jshell> String s = """
   ...> TwoLines
   ...> """;
s ==> "TwoLines\n"

不同于传统字符串的是,在编译期,文字块要顺序通过如下三个不同的编译步骤:

  1. 为了降低不同平台间换行符的表达差异,编译器把文字内容里的换行符统一转换成 LF(\u000A);
  2. 为了能够处理 Java 源代码里的缩进空格,要删除所有文字内容行和结束分隔符共享的前导空格,以及所有文字内容行的尾部空格;
  3. 最后处理转义字符,这样开发人员编写的转义序列就不会在第一步和第二步被修改或删除。

文字块是在编译期处理的,并且在编译期被转换成了常量字符串,然后就被当作常规的字符串了。所以,如果文字块代表的内容,和传统字符串代表的内容一样,那么这两个常量字符串变量就指向同一内存地址,代表同一个对象。

为了能够支持尾部附带的空格,文字块还引入了另外一个新的转义字符,'\s',空格转义符。空格转义符表示一个空格。我们前面说过的文字块的编译器处理顺序,空格转义符不会在文字块的编译期被删除,因此空格转义符之前的空格也能被保留。所以,每一行使用一个空格转义符也就足够了。


此文章为9月Day4学习笔记,内容来源于极客时间《深入剖析 Java 新特性》

相关推荐
树獭叔叔21 小时前
OpenClaw Agents 系统:多代理架构与智能编排的完整技术解析
后端·aigc·openai
蝎子莱莱爱打怪1 天前
ESXi 强制断电后恢复CentOS7虚拟机避坑指南:解决重复注册&目录清理难题
linux·后端·程序员
ConardLi1 天前
OpenClaw 完全指南:这可能是全网最新最全的系统化教程了!
前端·人工智能·后端
树獭叔叔1 天前
OpenClaw Workspace 文件完整指南:从文件到 AI 行为的完整链路
后端·aigc·openai
神奇小汤圆1 天前
别死记硬背!Java的CountDownLatch 核心原理:AQS state 才是关键
后端
ssshooter1 天前
告别 Chat Completions:深度解析 AI 接口新标准 `/v1/responses`
人工智能·后端·开源
武子康1 天前
大数据-244 离线数仓 - Hive ODS 层建表与分区加载实战(DataX→HDFS→Hive)
大数据·后端·apache hive
神奇小汤圆1 天前
MySQL 时间类型选型避坑:timestamp 和 datetime 该怎么选?
后端
Gardener1721 天前
关于使用kubevirt 的 api 创建的虚拟机
后端
Java编程爱好者1 天前
请收藏好:Doug Lea写的理解 Java NIO 与 Reactor 模式最权威的资料
后端