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