差異處
這裏顯示兩個版本的差異處。
java:basic:typedef [2017/08/19 23:33] |
java:basic:typedef [2023/06/25 09:48] (目前版本) |
||
---|---|---|---|
行 1: | 行 1: | ||
+ | {{tag>java}} | ||
+ | ====== 型態定義 ====== | ||
+ | 某天在改findbug所找出的問題時,看到了所謂的Boxed Primitives型態。當初學java並沒拿書從頭開始讀,而是直接從寫code開始,對於型態名稱定義不太了解。後來查詢一下,在此分享給大家**primitive types**、**reference types**與**boxed primitives**的差別: | ||
+ | * **primitive types**: 原始型態,即int、double、long等不用new就可以用的基本型態。 | ||
+ | * **reference types**: 參考型態,除了boxed primitives外,透過new產生出來的類別,如String、Collection等。 | ||
+ | * **boxed primitives**: 封裝原始型態,int、double、long等原始型態所對應的類別,如Integer、Double、Long等。 | ||
+ | |||
+ | 使用boxed primitives的好處是支援null與一些功能性methods。因為有了物件概念,無法直接透過==去判斷兩個boxed primitives是否相同,必須改用equals。如果boxed primitives與primitive types做==,boxed primitives會自動被解封裝為unboxed。 | ||
+ | <code java> | ||
+ | Double a = new Double(0); | ||
+ | Double b = new Double(0); | ||
+ | System.out.println( a == b ); // false | ||
+ | System.out.println( a.equals(b) ); // true | ||
+ | System.out.println( a == 5 ); // false | ||
+ | System.out.println( a == 0 ); // true | ||
+ | </code> | ||
+ | 因為boxed primitives可能是null,在下面這種情況就會拋出nullpointerException: | ||
+ | <code java> | ||
+ | private Double c; | ||
+ | |||
+ | public void testNullDouble(){ | ||
+ | System.out.println( 5 == c ); | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | ===== ===== | ||
+ | ---- | ||
+ | \\ | ||
+ | ~~DISQUS~~ |