String的知識點

String中==和equals的區別

==只是用來比較兩個引用的值.

String類重寫了Object類中的equals方法,該方法用於判斷字符串是否相同.

String s1 = “abc”;Strings2 = new String(“abc”);的區別

s1在內存中有一個對象.

s2在內存中有兩個對象.


1.判斷定義爲String類型的s1和s2是否相等
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2); //true 先去常量池裏找有沒有abc這個對象,如果沒有,就創建一個,如果有,就不創建了
System.out.pritnln(s1.equals(s2)); //true 因爲String重寫了Object裏的equals方法,比較是對象的內容,只要他們內容一模一樣就爲true
2.下面這句話在內存中創建了幾個對象?
String s1 = new String("abc"); //單獨寫這句話就是創建兩個對象,先在常量池裏創建一個,然後將常量池副本拷貝一份給堆內存的對象裏
3.判斷定義爲String類型的s1和s2是否相等
String s1 = new String("abc");
String s2 = "abc";
System.out.println(s1 == s2); ? //false s1是記錄的堆內存的地址值,s2記錄的是常量池中的地址值
System.out.pritnln(s1.equals(s2)); ? //true 因爲String重寫了Object裏的equals方法,比較是對象的內容,只要他們內容一模一樣就爲true
4.判斷定義爲String類型的s1和s2是否相等
String s1 = "a" + "b" + "c";
String s2 = "abc";
System.out.println(s1 == s2); ? //true 因爲java編譯器有常量優化機制,在編譯的時候就把"a","b","c"三個常量看成了一個常量"abc"
System.out.pritnln(s1.equals(s2)); ? //true 因爲String重寫了Object裏的equals方法,比較是對象的內容,只要他們內容一模一樣就爲true
5.判斷定義爲String類型的s1和s2是否相等
String s1 = "ab";
String s2 = "abc";
System.out.println((s1 + "c") == s2); ? //false 字符串與其他的類型用+相連接的時候,其實底層是調用StringBuffer的append方法,相當於
//在堆內存創建了一StringBuffer對象
System.out.pritnln((s1 + "c").equals(s2)); ?//true 因爲String重寫了Object裏的equals方法,比較是對象的內容,只要他們內容一模一樣就爲true

發佈了35 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章