1,javaSript var str1="123"; var str2="123"; console.log(str1==str2);//true console.log(str1 str2);//true 這個沒什麼要說的 js裡面引入了嚴格執行的 符號,兩個等號和三個等號的區別在於 1,"== ...
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