- 如果傳入的參數是 null 時, equals 總是回傳 false,而 compareTo 則是丟出 java.lang.NullPointerException。
範例如下:
"foo".equals((String)null) // 回傳 false "foo".compareTo((String)null) == 0 // 丟出 NullPointerException
- compareTo 除了可以比對字串是否相等外,還可以得知哪一個字串比較大或者小,equals 只能比對是否相等。
另外好奇的是,為何將 null 傳入 equals 裡面會沒事,看了一下原始碼你會發現類似下面的程式碼:
if (anObject instanceof String) { ... }而 null 是物件的參考常數值,它可以被任何物件所參考,但它不屬於任何物件。也就是說 null instanceof object 總是回傳 false,故在將它傳入 equals method 並不會丟出任何例外。
下面是從 Oracle 上查詢到的資料,解釋有關 null type。有興趣的人可以連結過去查看。
There is also a special null type, the type of the expression null (§3.10.7, §15.8.1), which has no name. Because the null type has no name, it is impossible to declare a variable of the null type or to cast to the null type. The null reference is the only possible value of an expression of null type. The null reference can always undergo a widening reference conversion to any reference type. In practice, the programmer can ignore the null type and just pretend that null is merely a special literal that can be of any reference type.
沒有留言:
張貼留言