前端和後端字串比較的區別
阿新 • • 發佈:2022-12-02
1,javaSript
var str1="123";
var str2="123";
console.log(str1==str2);//true
console.log(str1===str2);//true
這個沒什麼要說的
js裡面引入了嚴格執行的=== 符號,兩個等號和三個等號的區別在於
1,""表示 等同,會在比較之前進行型別轉換,將等號兩邊轉換成相同的型別進行比較,就算型別不同,只要值一樣,就可以
2,"="表示相等,不會進行型別轉換
var str3=123; console.log(str1==str3);//true console.log(str1===str3);//false
進行字串擷取的時候和上面的相同,不會出現Java裡面的擷取之後不相等的情況
var str4=str2.slice(0,2);
console.log(str4=="12");
console.log(str4==="12")
2,Java
關於字串常量池可以先看這邊文章:Java中的字串常量池詳細介紹
1,""是屬於運算子號,等號兩邊是基本資料型別的時候,僅僅是比較值的異同,當等號兩邊是字串等引用型別的時候,就會比較引用型別的地址,只有地址相同的時候才會相等
2,equals是方法,比較的雙方只能是引用型別,equals原始碼是通過 比較記憶體地址的,一般的類都會重寫equals方法,比較兩個的值,String裡面就是這樣
String str1="1234";
String str2="1234";
System.out.println(str1==str2);//true
System.out.println(str1.equals(str2));//true
使用字面常量的形式建立字串時候,會先掃描常量池,例子中的str2建立的時候就會掃描,不會重複建立.
String str3=str2.substring(0,2);//字串擷取
System.out.println(str3=="12");//false
System.out.println(str3.equals("12"));//true
字串擷取,看原始碼的時候 發現其實是使用new String 建立的,建立了物件沒有加入常量池,所以記憶體地址不相同.==比較的結果是false
如果將擷取的字串加入常量池,再次比較.就會為true了
String str3=str2.substring(0,2).intern();//使用intern(),字串加入常量池
System.out.println(str3=="12");//true
System.out.println(str3.equals("12"));//true