在Java 21中,除了推出很多新特性之外,一些Bug修複,也需要註意一下。因為這些改變可能在升級的時候,造成影響。 Double.toString()和Float.toString()的精度問題修複 比如:對於Double.String(1e23): 在Java 19後,輸出內容為:1.0E23 ...
在Java 21中,除了推出很多新特性之外,一些Bug修複,也需要註意一下。因為這些改變可能在升級的時候,造成影響。
Double.toString()
和Float.toString()
的精度問題修複
比如:對於Double.String(1e23)
:
- 在Java 19後,輸出內容為:
1.0E23
- 在Java 18中,輸出內容為:
9.999999999999999E22
歡迎關註,持續更新的Java新特性專欄
IdentityHashMap
的remove(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。第一時間瞭解前沿行業消息、分享深度技術乾貨、獲取優質學習資源