這些是否有區別?Java中各種字符串比較之間的區別
if(myString.equals("")){
}
if(myString.equals(null)){
}
if(myString == ""){
}
我有一個字符串,我不知道是不是空的,或者有一些emtpy空間我只是wan't阻止它被寫入數據庫,如果它是無效的(如果爲空或有一些空格)。
這些是否有區別?Java中各種字符串比較之間的區別
if(myString.equals("")){
}
if(myString.equals(null)){
}
if(myString == ""){
}
我有一個字符串,我不知道是不是空的,或者有一些emtpy空間我只是wan't阻止它被寫入數據庫,如果它是無效的(如果爲空或有一些空格)。
達到你想要什麼,寫:
if (!myString.trim().equals("")) {
// write to database
}
,或者還有一種可能性,即myString
可能null
:
if (myString != null && !myString.trim().equals("")) {
// write to database
}
是的。
如果字符串爲空,則首先返回true。
第二個將總是返回false。
三會返回真,如果你的字符串精確定義是這樣的:
String myString = "";
注意,這是不一樣的1的情況下!價值平等的第一次測試,而身份的第二次測試。
String myString = "";
String myOtherString = new String(myString);
assert myString == "";
assert myOtherString.equals("");
assert myOtherString != "";
底線是:
myString == null
爲空測試,所以1和3之間沒有區別? – 2010-04-14 15:39:36
你不應該使用3,應該檢查諸如字符串之類的對象是否與.equals相等。但是,您應該使用==來檢查字符串是否爲空。 – ColinD 2010-04-14 15:41:49
你的每個例子都是互不相同的。
myString
是空NullPointerException
myString
引用空字符串常量。如果變量是用空字符串常量(或)明確初始化的,如果變量用某個「生成的」空字符串初始化(例如new StringBuilder().toString()
),然後通過intern()
明確添加到常量池中,則這將成立。正如在評論中指出的那樣,第一個例子也可能拋出NullPointerException
,但不是第三個。
pajton加入了正確的答案。以澄清你的嘗試有什麼問題:
//true if myString is the empty string. will fail on " "
if(myString.equals("")){
}
//always false, or fails
//if myString is null, you'll get a NullPointerException
//if it isn't, you'll get false
if(myString.equals(null)){
}
//a bad way to do things with unexpected results.
//when dealing with objects, == is true when each are the same object.
//two different objects that have the same content or value (e.g. clones)
//will return false using this technique
if(myString == ""){
}
Java中的字符串只是另一個對象。你的第一個比較是最正確的。它將myString與空白進行比較,如果字符串也爲空(「」),則返回true。第二個比較總是假的。第三,它比較對象的平等性(將它想象爲比較對象的地址)。我認爲將總是返回false,除非你的字符串是字符串myString =「」(不確定在這一個)。
它們都是不同的。假設myString的非空,
只需使用Apache的百科全書StringUtils.isBlank()
編輯:達到你想要使用的是什麼// @ zim2001的方法做到這一點:
if (StringUtils.isNotBlank(myString)) {
// write to database
}
這是容易得多比目前公認的答案閱讀。 (但請在此處查看其他帖子以瞭解與String一起工作的細節)。
我的猜測是他開始學習編程,或者至少是java。將他指向API而不是解釋發生的事情並不是最好的教學。 – 2010-04-14 15:59:10
我發佈的時候已經有4篇文章教Java了。我選擇「教」一種替代方法。總有不止一種方法來給貓換膚。此外,請參閱@ zim2001回答當前最佳答案。是的,最好的海事組織,因爲它提供了一個更簡潔的方法,因此比目前接受的答案更容易閱讀。 – harschware 2010-04-16 19:03:33
如果您不打算依賴外部庫,則可以使用apache commons的StringUtils類,它提供了一種名爲「 isNotBlank()」,這似乎完全適合你的需要:
Checks if a String is not empty (""), not null and not whitespace only.
StringUtils.isNotBlank(null) = false
StringUtils.isNotBlank("") = false
StringUtils.isNotBlank(" ") = false
StringUtils.isNotBlank("bob") = true
StringUtils.isNotBlank(" bob ") = true
這個答案將有助於http://stackoverflow.com/questions/767372/java-string-equals-versus/767379 #767379 – Babar 2010-04-14 15:39:11