其實我正在測試Scanner的功能。
使用java.util.Scanner時字符串的奇怪行爲
我有一個非常簡單的程序,它有一個字符串變量,其中包含「abc」。然後使用next()方法(甚至我嘗試nextLine())從掃描儀讀取其他字符串(值「abc」)。
然後我比較使用==,根據==檢查它們是否相等(我知道我可以與equals方法進行比較,它的工作方式除外),奇怪的是當我比較使用==,即使它們的hashcode()s相等,並且equals()方法返回true ..
import java.util.Scanner;
public class Tester1234 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String str1="abc";
System.out.println("Eneter abc");
String str2=scanner.next();
System.out.println("str1.hascode()"+str1.hashCode()+"\tstr2.hascode()"+str2.hashCode()+"\tstr2.equals(str1)"+str1.equals(str2));
if(str1==str2)
{
System.out.println("equal");
}
else
{
System.out.println("not equal");
}
}
}
我想知道它爲什麼表現如此?
謝謝......!
@ mc10我知道這......我想知道爲什麼不與== ......我知道具有相同內容的字符串將指向StringPool中的同一對象...所以如果我這樣做==爲什麼它回來了嗎? – Naren
Opps對不起,事情是,當你做新的字符串時,它會將原始值複製到內部的'最終字符值[]',並根據'value []'生成hashcode,這就是爲什麼你得到相同的equals和hashcode,但'=='失敗,因爲它包裝在駐留在堆中的新對象下。 –