一、概述
java中判等似乎很簡單,==用來判斷對象引用(內存地址)是否相同,equals用來判斷值是否相同。你可以試用String對象輕松區分這一點。
那么在null判等(也就是判空操作)時呢?
可以通過如下代碼明白兩個判等的比較:
String name = null; if(null==name){ System.out.println("null==name");//通過 } if(name==null){ System.out.println(name); System.out.println("name==null");//通過 } String list = null; if(!"demo".equals(list)){ System.out.println("demo.equals(list)");//通過 } //編譯器會在此處提示一個警告:Null pointer access: The variable list can only be null at this location if(!list.equals("demo")){ System.out.println("list.equals(demo)");//不通過 }
1.通過紅色字體代碼證明了String類型在==判等時
誰放前,誰放后是一樣的。而null==xxxx這樣的寫法,我覺得只是一個規范習慣的方式,保證你不會少寫=,因為你寫null=xxx編譯器肯定會給你報錯。
那么,除了String類型的對象,其他類型的對象呢?是否在試用==時也是誰放前誰放后沒有區別呢?
NullEquals e = null; if(e==null){ System.out.println("e==null");//通過 } if(null==e){ System.out.println("null==e");//通過 }
結果也一樣,證明了null判等這件事上,哪中對象是無所謂的,誰放前放后都可以。
2.通過藍色字體的代碼證明了使用equals方法時,必須將非空的對象放在前面,null的對象一定不能放在前面。
所以這里要養成"".equals()方法來判空的操作
二、注意
這兩個判等操作墨守成規的,你實現某個類,重寫它的equals方法最好也是用來判斷他們的值是否相等,否則其他程序員在使用時容易誤會。
總結:判空時,養成null在前是個好習慣
判等時,為了避免被判斷對象可能為空,所以把肯定不為空的對象放到前面是個好習慣
注:以上代碼都經過測試