Java 21中的兩個值得關注的Bug修復

在Java 21中,除了推出很多新特性之外,一些Bug修復,也需要注意一下。因爲這些改變可能在升級的時候,造成影響。

Double.toString()Float.toString()的精度問題修復

比如:對於Double.String(1e23)

  • 在Java 19後,輸出內容爲:1.0E23
  • 在Java 18中,輸出內容爲:9.999999999999999E22

歡迎關注,持續更新的Java新特性專欄

IdentityHashMapremove(key, value)replace(key, value, newValue)的錯誤處理

IdentityHashMap是Java中自帶的一個集合,是一個比較特殊的Map實現。它使用的是恆等比較(而不是equals方法)來判斷兩個鍵是否相等。

這意味着,對於同一個對象的不同引用,IdentityHashMap會將它們視爲不同的鍵,而其他Map實現類則會將它們視爲相同的鍵。

在Java 20之前(不含Java 20)IdentityHashMap中的remove(key, value)replace(key, value, newValue)方法,錯誤地將值參數與映射中的值進行了equals比較,這使得remove(key, value)replace(key, value, newValue)方法執行結果不如預期。

如下例子所示,Java 20之前是不對的,但Java 20之後可以正確實現了。

var users = new IdentityHashMap<String, User>();
String key = "abc";
users.put(key, new User("Jane Doe"));
var removed = users.remove(key, new User("Jane Doe"));
assert !removed;

如果您學習過程中如遇困難?可以加入我們超高質量的技術交流羣,參與交流與討論,更好的學習與進步!

歡迎關注我的公衆號:程序猿DD。第一時間瞭解前沿行業消息、分享深度技術乾貨、獲取優質學習資源

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章