权威做网站的公司,tp类似wordpress,营销网站建设推广,怎么做广告宣传最有效jdk 1.8 字符串问题“ 为什么array [i #xff05;n] i ”在Java 8和Java 10中给出不同的结果#xff1f; ”已于本周初发布在StackOverflow.com上 。 它指出JDK9和更高版本中存在的Java编译器中的错误 #xff0c;但JDK8中不存在。 如StackOverflow线程上所述#xff0… jdk 1.8 字符串 问题“ 为什么array [i n] i ”在Java 8和Java 10中给出不同的结果 ”已于本周初发布在StackOverflow.com上 。 它指出JDK9和更高版本中存在的Java编译器中的错误 但JDK8中不存在。 如StackOverflow线程上所述 Didier L提供了一个简单的Java代码示例来重现此问题。 这将在下面显示的代码清单中进行调整。 package dustin.examples.strings;import static java.lang.System.out;/*** Example demonstrating JDK-8204322 and adapted from Didier Ls* original example (https://stackoverflow.com/q/50683786).*/
public class StringConcatenationBug
{static void didierLDemonstration(){final String[] array {};array[generateArrayIndex()] a;}static int generateArrayIndex(){out.println(Array Index Evaluated);return 0;}public static void main(final String[] arguments){didierLDemonstration();}
} 阅读上面显示的代码如果执行了该类的main(String[])函数则希望看到字符串“ Array Index Evaluated”显示一次。 对于JDK8情况就是这样但是自JDK 9起情况并非如此。 下一个屏幕快照对此进行了演示。 屏幕快照中显示的示例显示当使用javac的-source和-target标志设置为“ 8 ”编译该类时在执行该编译的类时该字符串仅显示一次。 但是当javac的-source和-target标志设置为“ 9 ”时在执行编译的类时该字符串显示两次。 此错误存在于JDK9JDK10和JDK11中。 OlivierGrégoire描述了此错误“问题似乎仅限于字符串串联和赋值运算符 且表达式的副作用为左操作数。” JDK-8204322 [已为该错误编写了“已应用到字符串操作数的 可能引起副作用”]现已解决其解决方案目前针对JDK11 。 错误报告描述了该问题“使用 运算符时似乎javac在 之前重复了代码。” 它还说明了类似array[i%n] i ;编写的代码array[i%n] i ; 有效地编译为类似于array[i%n] array[i%n] i ; 。 扬·拉霍达Jan Lahoda 对错误的评论描述了它发生的原因。 Aleksey Shipilev已要求将此修复程序反向移植到JDK 10看来它将通过JDK-8204340进行 。 有关此错误的其他背景信息可以在前面提到的StackOverflow线程 相关的StackOverflow聊天以及OpenJDK 编译器-dev邮件列表线程中找到“ 有关字符串连接的编译器错误 ”和“已应用RFR8204322 字符串操作数会引起 “ 副作用 ”。 翻译自: https://www.javacodegeeks.com/2018/06/jdk9-side-effects-java-string.htmljdk 1.8 字符串