簡析一下java中的String的比較
雖然這很簡單,但還是讓不少新手困惑。
說明一下 ==和equals 的區別。
==比較的是引用,就是地址,而equals是比較值,比較值的話,是值相同就返回true,而引用的話,值相同不一定相等,只有引用的地址相同纔會相等,但是引用相同,值一定相等。
下面舉例說明一下
String str= "hello";
String str1 ="hello";
Boolean b1= str==str1?true:false;
Boolean b2=srt.equals(str1)?true:false;
System.out.println(b1+ " "+b2);
結果是true ,true。
說明一下java聲明String的機制,在聲明過程中,沒有使用new關鍵字的話,它會在常量池中去找,是否有hello這個字符串,如果有,那麼那就會指向這個引用,也就是說不會創建新的常量,如果沒找到的話纔會創建一個新的常量hello ,在這裏第二個字符串沒有使用new關鍵字,且有hello字符串常量的存在,所以str1的引用和str相同
String str= "hello";
String str1 =new String("hello");
Boolean b1= str==str1?true:false;
Boolean b2=srt.equals(str1)?true:false;
System.out.println(b1+ " "+b2);
結果是false ,true
使用new關鍵字的話,它不管常量池中是否有hello這個字符串,會直接聲明一個新的引用,分配新的地址。所以在這裏str==str1返回false
本人才疏學淺,如果疑問或有不足之處都歡迎溝通。