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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/539021.html
標籤:其他
