前端和后端字符串比較的區(qū)別
1,javaSript
? ?var str1="123";
? ?var str2="123";
? ?console.log(str1==str2);//true
? ?console.log(str1===str2);//true
這個(gè)沒什么要說的
js里面引入了嚴(yán)格執(zhí)行的=== 符號(hào),兩個(gè)等號(hào)和三個(gè)等號(hào)的區(qū)別在于
1,""表示 等同,會(huì)在比較之前進(jìn)行類型轉(zhuǎn)換,將等號(hào)兩邊轉(zhuǎn)換成相同的類型進(jìn)行比較,就算類型不同,只要值一樣,就可以
2,"="表示相等,不會(huì)進(jìn)行類型轉(zhuǎn)換
? ?var str3=123;
? ?console.log(str1==str3);//true
? ?console.log(str1===str3);//false
進(jìn)行字符串截取的時(shí)候和上面的相同,不會(huì)出現(xiàn)Java里面的截取之后不相等的情況
? ?var str4=str2.slice(0,2);
? ?console.log(str4=="12");
? ?console.log(str4==="12")
2,Java
關(guān)于字符串常量池可以先看這邊文章:Java中的字符串常量池詳細(xì)介紹
1,""是屬于運(yùn)算符號(hào),等號(hào)兩邊是基本數(shù)據(jù)類型的時(shí)候,僅僅是比較值的異同,當(dāng)?shù)忍?hào)兩邊是字符串等引用類型的時(shí)候,就會(huì)比較引用類型的地址,只有地址相同的時(shí)候才會(huì)相等
2,equals是方法,比較的雙方只能是引用類型,equals源碼是通過?比較內(nèi)存地址的,一般的類都會(huì)重寫equals方法,比較兩個(gè)的值,String里面就是這樣
String str1="1234";
String str2="1234";
System.out.println(str1==str2);//true
System.out.println(str1.equals(str2));//true
使用字面常量的形式創(chuàng)建字符串時(shí)候,會(huì)先掃描常量池,例子中的str2創(chuàng)建的時(shí)候就會(huì)掃描,不會(huì)重復(fù)創(chuàng)建.
String str3=str2.substring(0,2);//字符串截取
System.out.println(str3=="12");//false
System.out.println(str3.equals("12"));//true
字符串截取,看源碼的時(shí)候 發(fā)現(xiàn)其實(shí)是使用new String 創(chuàng)建的,創(chuàng)建了對(duì)象沒有加入常量池,所以內(nèi)存地址不相同.==比較的結(jié)果是false
如果將截取的字符串加入常量池,再次比較.就會(huì)為true了
String str3=str2.substring(0,2).intern();//使用intern(),字符串加入常量池
System.out.println(str3=="12");//true
System.out.println(str3.equals("12"));//true
鏈接:https://www.dianjilingqu.com/626854.html