第 2 章 Eclipse Temurin 功能
Eclipse Temurin 不包含来自 OpenJDK 上游发行版的结构性更改。
有关 Eclipse Temurin 最新 OpenJDK 17 发行版本的更改和安全修复程序,请参阅 OpenJDK 17.0.14 发行版本。
新功能及功能增强
Eclipse Temurin 17.0.14 包括以下新功能和增强:
修复 调用dynamic 字符串串联更改操作顺序
OpenJDK 9 到 JEP-280 添加的 Indify String Concatenation 功能按字符串串联表达式被评估的顺序引入了一个回归。Java 语言规范 要求以左到右顺序完全评估操作对象。但是,引入 invokedynamic (indy)调用由 javac 编译器生成,用于评估字符串串联表达式,所有操作对象都会按顺序评估,但不会转换为字符串。在这种情况下,每个操作对象仅在稍后转换为字符串。
例如,请考虑以下代码,其中串联的第三个参数具有将 构建器 的值更改为 "goodbye" 的副作用:
StringBuilder builder = new StringBuilder("good");
return "" + builder + builder.append("bye");
根据前面的例子,在早期版本中,Indify String Contenation 功能不会将第二个参数转换为字符串,直到 builder.append 方法更改了 StringBuilder 对象。在这种情况下,串联会错误地成为 "" + "goodbye" + "goodbye",这会生成 "goodegoodbye" 作为输出。
在 OpenJDK 17.0.14 中,字符串串联评估和立即将每个参数转换为以左到右的顺序的字符串。在这种情况下,串联可以正确地变为 "" + "good" + "goode",这会生成 "goodbye" 作为输出。
这个问题的解决方法与使用 OpenJDK 9 之前提供的 javac 编译器版本相同,或使用 -XDstringConcat=inline 命令行选项运行 javac。
请参阅 JDK-8273914 (JDK Bug System)。
jar 命令的选项,以避免在提取存档时覆盖文件
在之前的 OpenJDK 版本中,当 jar 工具从存档中提取文件时,jar 工具会覆盖目标目录中名称相同的任何现有文件。
OpenJDK 17.0.14 添加了一个 new -k (or --keep-old-files)选项,以确保 jar 工具不会覆盖现有文件。您可以使用短或长格式指定这个新选项。
例如:
-
JAR xkf myfile.jar -
JAR --extract --keep-old-files --file myfile.jar
在 OpenJDK 17.0.14 中,jar 工具默认保留旧行为。如果您没有明确指定 the -k (or --keep-old-files)选项,jar 工具会自动覆盖具有相同名称的任何现有文件。
请参阅 JDK-8335912 (JDK Bug System) 和 JDK bug system reference ID: JDK-8337499。
IANA 时区数据库更新至 2024b 版本
在 OpenJDK 17.0.14 中,互联网分配号(IANA)时区数据库的树内副本更新至 2024b 版本。这个版本主要关注改进墨西哥、Mongolia 和葡ugal 的历史数据。
对 IANA 数据库的这个更新还包括以下更改:
-
Asia/Choibalsan是Asia/Ulaanbaatar的别名。 - 欧洲时间(MET)时区等于中欧时间(CET)。
有些旧的时间 ID 映射到地理位置的名称,而不是固定偏移:
-
东部标准时间(EST)映射到
美国/巴马,而不是-5:00。 -
Mountain Standard Time (MST)映射到
America/Phoenix而不是-7:00。 -
Hawaii Standard Time (HST)被映射到
Pacific/Honolulu而不是-10:00。
OpenJDK 通过保留现有的 fixed-offset 映射来覆盖旧时间 ID 映射的更改。
-
东部标准时间(EST)映射到
请参阅 JDK-8339637 (JDK Bug System)。
更新于 2025-01-30