日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

JDK 9/10/11:Java字符串上+ =带来的副作用

發布時間:2023/12/3 java 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JDK 9/10/11:Java字符串上+ =带来的副作用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題“ 為什么`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 L's* 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 ”時,在執行編譯的類時,該字符串顯示兩次。

此錯誤存在于JDK9,JDK10和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郵件列表線程中找到“ 有關字符串連接的編譯器錯誤 ”和“已應用RFR:8204322:'+ ='字符串操作數會引起 “ 副作用 ”。

翻譯自: https://www.javacodegeeks.com/2018/06/jdk9-side-effects-java-string.html

總結

以上是生活随笔為你收集整理的JDK 9/10/11:Java字符串上+ =带来的副作用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。