Java中利用Scanner鍵入的字符串與其他字符串的比較


利用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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM