利用Scanner獲取到鍵入的字符串與其他字符串作比較時,如果直接用關系運算符 == 比較,得到的結果總是false,因為實際比較的是兩個變量引用的內存地址;
而要比較其內容是否相等,可以使用Object的equals方法。
例子:
Scanner sc = new Scanner(System.in); String str1 = sc.next(); //從鍵盤中鍵入 你好 String str2 = "你好"; System.out.println(str1 == str2); //false System.out.println(str1.equals(str2)); //true

下面的例子中兩個字符串變量引用的是同一個字符串常量(“你好”),即“指向”了同一塊內存地址,所以當用 == 比較這兩個變量時得到的結果是true。
String str1 = "你好"; String str2 = "你好"; System.out.println(str1 == str2); //true
System.out.println(str1.equals(str2)); //true

上面兩個例子看起來似乎都是 兩個字符串變量(str1,str2)引用了同一個字符串常量(“你好”)。
但實際上,只有第二個例子中的 兩個變量 引用了存放在data segement中的同一個字符串常量,即這兩個變量“指向”同一塊存放“你好”字符串常量的地址;
第一個例子中,通過鍵入產生的字符串 相當於 String str1 = new String("你好"); new出來的一個新對象,不論之前是否有內容相同的對象,都會再new一個新的對象;
str1所引用到的與直接定義的字符串變量str2所引用的對象不同,故用==比較為false。
