關於String str="abc"與String str= new String("abc")區別

                       看到一個面試題說是String str1="abc"與String str2="abc"打印 str1==str2的結果,結果搞錯了驚恐下面說明下這個問題,先看下代碼

                     

                String str1 = "abc";
		String str2 = "abc";
		
		System.out.println(str1==str2);
		
		System.out.println("====================分割線=====================================");
		
		String str3 = new String("abc");
		String str4 = new String("abc");
		  
		System.out.println(str3==str4);

                       測試結果如下

                     



                    解釋下原因,第一個true是因爲,String是final的,他存儲在方法區的常量區,看下圖

                       

                      

                  顯然“abc”在常量區只有一份,所以在多的引用,都是指向內存中同一個地址,所以結果是true


               但如果是new 一個String對象呢,結果就會有所不同,此時在堆區會有一個對象被創建,如下圖


              


                         從圖中可以看出使用new 創建字符串時,會在堆區(heap)創建一個對象,它們都會引用常量區的一個字符串,所以,str3和str4不同。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章