if (!password2.equals(password1)|| "".equals(password1) || password1.equals(null))一句的錯誤解析:
首先,正確的寫法是if (null.equals(password1) || "".equals(password1) || !password1.equals(password2))。
然后來解析錯誤的寫法:
主要的錯誤在password1.equals(null)這一句,這一句錯的原因是,password1放在外面,如果它是null,那么就會報空指針異常。而且它應該第一個檢查,因為如果password1為null,那么后面的就都不用檢查了。
!password2.equals(password1)同上,password2同樣可能發生空指針問題,所以要將password1放外面,因為前面已經檢測過了,所以如果執行這句,password1肯定不會為null。
另外,也可以寫成如下形式:if (StringUtils.isEmpty(password1) || !password1.equals(password2)),StringUtils.isEmpty(password1)就等同於null.equals(password1) || "".equals(password1),只是做了封裝而已。
附一句別人對StringUtils的說明:(轉)StringUtils 方法的操作對象是 java.lang.String 類型的對象,是 JDK 提供的 String 類型操作方法的補充,並且是 null 安全的(即如果輸入參數 String 為 null 則不會拋出 NullPointerException ,而是做了相應處理,例如,如果輸入為 null 則返回也是 null 等,具體可以查看源代碼)。
2、關於str.equal(“abc”)和”abc”.equal(str)
這個好像爭論也挺多的,第一種常量寫在后面可能符合大多數人的習慣,也符合我們的邏輯思維。但是需要多一個str是否為null的判斷。否則這里是有可能出現異常的。而后一種寫法不需要多做關於是否為null這個判斷。就我個人喜好來說,比較喜歡后一種寫法。
3、關於String的null
/**
* 測試java的String為null 的情況
* create date:2009-6-3
* author:Administrator
*
*/
public static void testNull(){
String a= null,b = null,c="呵呵";
System.out.println(a == null);
System.out.println(a+b+c);
}
方法運行結果:
true
nullnull呵呵
所以大家要注意了做字符串合並操作時,別忘記判斷null,否則結果會不太讓你爽啊!
這個好像爭論也挺多的,第一種常量寫在后面可能符合大多數人的習慣,也符合我們的邏輯思維。但是需要多一個str是否為null的判斷。否則這里是有可能出現異常的。而后一種寫法不需要多做關於是否為null這個判斷。就我個人喜好來說,比較喜歡后一種寫法。
3、關於String的null
/**
* 測試java的String為null 的情況
* create date:2009-6-3
* author:Administrator
*
*/
public static void testNull(){
String a= null,b = null,c="呵呵";
System.out.println(a == null);
System.out.println(a+b+c);
}
方法運行結果:
true
nullnull呵呵
所以大家要注意了做字符串合並操作時,別忘記判斷null,否則結果會不太讓你爽啊!