2012-09-02 29 views
1

這似乎很簡單,但我已經在這裏停留了幾個小時。Java輸入問題 - 如何比較字符串

我有一個疑問,當你必須比較Java中的兩個字符串。

,如果我只是做這樣的事情:

String var1 = "hello"; 
String var2 = "hello"; 

,然後比較其他功能這兩個詞,結果顯然是正確的。

但問題是,當我必須比較來自輸入的兩個單詞。這裏是我的代碼:

import java.util.Scanner; 

public class Compare{ 

public static void main(String[] args){ 
    Scanner Scanner = new Scanner (System.in); 

    System.out.println("Enter first word: "); 
    String var1 = Scanner.nextLine(); 

    System.out.println("Enter second word: "); 
    String var2 = Scanner.nextLine(); 

    if (same (var1, var2)) 
     System.out.println("Yes"); 
    else 
     System.out.println("No"); 
} 

public static boolean same (String var1, String var2){ 
    if (var1 == var2) 
     return true;   
    else 
     return false; 
} 


} 

我已經嘗試了幾次(清楚地輸入相同的單詞),結果總是假的。

我不知道爲什麼會發生這種情況。我錯過了什麼?

這是我第一次使用Java。我會很感激任何幫助。由於

+0

使用var1.equals(VAR2)而不是== – Jayan

+0

http://stackoverflow.com/questions/995918/java-string-comparison – Jayan

+0

謝謝你的提示! – stbamb

回答

3

你應該改變

if (var1 == var2) 
{ 
    return true;   
} 
else 
{ 
    return false; 
} 

if (var1.equals(var2)) 
{ 
    return true;   
} 
else 
{ 
    return false; 
} 

用於代替if (same (var1, var2))使用if (v1.equals(v2))兩個

+1

或者簡單地'return var1.equals(v2)'。 –

+0

哈哈哈,很容易。謝謝,現在它工作!謝謝! – stbamb

+0

「if(true)return true」的目的是什麼? – mishadoff

0

的區別見this answer。不需要創建一個新方法來比較兩個String。這就是equals()所做的。

==用於比較引用,而不是每個String對象的內容。

+0

:S dint瞭解equals()。 非常感謝:D – stbamb

0

在Java中,==是一個引用相等運算符。

它適用於以下。

String var1 = "hello"; 
String var2 = "hello"; 
boolean cmp = var1 == var2; 

只是因爲他們是字符串和它們在字符串表內的同一個地方分配的,所以這兩個變量指向相同的字符串。

如果您從其他來源獲取數據,則字符串會動態分配,因此您應該使用var1.equals(var2)(並且在比較兩個對象時應始終使用該數據庫)。

0

爲了更加準確,在Java中使用Strings有時可以使用==代替.equals,前提是您的字符串已被實施。請記住,==總是比較對象引用,而不是對象的內容。實習一個字符串意味着你會得到相同的對象引用,這就是爲什麼==與實際字符串一起工作的原因。

請閱讀這裏的Javadoc這更清楚地瞭解:

String.intern()

0
var1 == var2 

有時因爲工作分配虛擬機相同的內存都爲內存優化的變量,因此具有同樣的參考。這並不總是如此,所以它更好使用

var1.equals(var2) 

如果你想比較它們的值,並不在乎引用。

0

等號運算符(==)首先檢查字符串的引用,然後檢查字符串的值。 equals方法首先檢查值。 所以,在這種情況下,應該使用equals方法而不是相等運算符。 String s="hello"; String s1="hello"; String s3=new String("hello") 在上面的代碼片段中,如果您使用If(s==s1){System.out.print("Equal");}它會打印相等。但如果您檢查If(s==s3){System.out.print("unqual");}它不會打印不等於。 所以,你可以看到,即使串S和S3是相等的,輸出是wrong.Therefore,在這種情況下象程序問題

的Equals必須使用的方法。