2013-01-20 173 views
1

我想創建一個函數,它將一個字符串作爲函數並返回一個int。Java - 從函數(字符串)返回int?

public int convert (String input) { 
    int x = -1; 
    if (input == "one") { 
     x = 1; 
    } 

    else if (input == "two") { 
     x = 2; 
    } 

    else if (input == "three") { 
     x = 3; 
    } 
    return x; 
} 

問題是,(假設輸入始終是三個輸入之一),該函數總是返回-1。香港專業教育學院的嘗試:

  • 返回0,而不是X
  • 和:

    public int convert (String input) { 
    
        if (input == "one") { 
        return 1; 
        } 
        else if (input == "two") { 
        return 2; 
        } 
        else if (input == "three") { 
        return 3; 
        } 
        return -1; 
    } 
    

謝謝你們。

+2

第一種方法將始終返回「0」,而不是「-1」。我編輯過它 – tipycalFlow

回答

11

的一個問題是:

if (input == "one") 

應該是

if ("one".equals(input)) 

字符串/對象相等性檢查應該使用equals()方法,而不是==(除了字符串文字比較的情況下)

==檢查引用相等。

equals()根據equals()實現檢查對象內容是否相等。

1

當你比較兩個字符串的平等時,永遠不要使用「==」運算符。因爲「==」運算符檢查地址是否相等,即如果您比較「x == y」,則檢查x的值和y的值是否位於相同的內存位置。這意味着==運算符比較引用。

由於String是一個對象,當您比較2個對象時,請不要使用==運算符,因爲它們會比較2個引用是否指向同一個對象。

在您的情況下,輸入指向一個對象,並且您將輸入與位於不同位置的其他對象進行比較。

例如,您的字符串「輸入」在地址位置123456處包含值「one」,並且在地址位置12347處創建新字符串「one」。因此,輸入==「one」將輸入的地址位置與不一樣。

所以您的示例使用

public int convert (String input) { 
int x = -1; 
if (input.equals("one")) { 
    x = 1; 
} 

else if (input.equals("two")) { 
    x = 2; 
} 

else if (input.equals("three")) { 
    x = 3; 
} 
return x; 
} 

.equals方法比較對象平等,而不是引用平等。因此如果使用.equals()方法比較兩個對象,您將獲得所需的輸出。