2013-03-23 93 views
0

我似乎遇到布爾測試問題。當我使用此代碼時:布爾測試問題

public boolean setPkg (String inPkg) 
    { 
     boolean isValid; 

     if ((inPkg.toUpperCase() != "A") || (inPkg.toUpperCase() != "B") || (inPkg.toUpperCase() != "C")) 
      isValid = false; 
     else 
     { 
      pkg = inPkg; 
      isValid = true; 
     } 

     return isValid; 
    } 

它在「A」上返回false。但是,當我只測試「A」時:

... 
if (inPkg.toUpperCase() != "A") 
isValid = false; 
      else 
      { 
       pkg = inPkg; 
       isValid = true; 
      } 

      return isValid; 
... 

它返回true。

我錯過了什麼?

我也嘗試使用多個if else語句來測試A,B或C,並且我得到A的錯誤。B和C沒有得到測試,因爲我的製作異常正在被拋出。

+0

只是添加到已有的答案,當你在java中的對象上使用==你比較對象,看看他們是否是同一個對象。 Java中的字符串文字(如「foo」或「Bar」)成爲完全成熟的Java對象。你需要使用.equals()來比較String對象的CONTENTS,而不是它們是否是同一個對象。 – Jazzepi 2013-03-23 20:11:03

回答

0

在比較字符串時,始終使用oneString.equals(otherString)而不是oneString == otherString

例如,而不是:

(inPkg.toUpperCase() != "A") 

用這個代替:

(!(inPkg.toUpperCase().equals("A"))) 

NEVER比較==!=字符串。請參閱:How do I compare strings in Java?

0

問題是您正在使用==來比較字符串。這不會做你認爲它的作用(它比較字符串引用,而不是字符序列)。

使用s1.equals(s2)代替,如

!inPkg.toUpperCase().equals("A") 

Java comparison with == of two strings is false?

0

==!=比較對象的引用。它們並不相同,因爲它們不是同一個對象。

String.equals(otherString)比較字符串的內容。你想使用這個功能。

1

兩個在這裏的東西:

  1. 代替=用equals方法進行比較
  2. 更換||!與& &
+1

這是唯一的答案,提到用戶試圖檢查像'string!='A'||字符串!='B''。該條件將始終返回true。 – 2013-10-15 22:44:17