1. 程式人生 > >String 和 new String()的區別

String 和 new String()的區別

終於開始寫部落格了,心中難免有所激動。今天就給大家帶來String 和 new String()的區分吧。上網查了很多資料,就是我的個人理解,當然也可能有錯誤,但希望對大家有幫助。

記住一點:棧區存引用和基本型別,不能存物件,而堆區存物件。==是比較地址,equals()比較物件內容。

String str1 = "abcd"的實現過程:首先棧區建立str引用,然後在String池(獨立於棧和堆而存在,儲存不可變數)中尋找其指向的內容為"abcd"的物件,如果String池中沒有,則建立一個,然後str指向String池中的物件,如果有,則直接將str1指向"abcd"";如果後來又定義了字串變數 str2 = "abcd",則直接將str2引用指向String池中已經存在的“abcd”,不再重新建立物件;當str1進行了賦值(str1=“abc”),則str1將不再指向"abcd",而是重新指String池中的"abc",此時如果定義String str3 = "abc",進行str1 == str3操作,返回值為true,因為他們的值一樣,地址一樣,但是如果內容為"abc"的str1進行了字串的+連線str1 = str1+"d";此時str1指向的是在堆中新建的內容為"abcd"的物件,即此時進行str1==str2,返回值false,因為地址不一樣。

String str3 = new String("abcd")的實現過程:直接在堆中建立物件。如果後來又有String str4 = new String("abcd"),str4不會指向之前的物件,而是重新建立一個物件並指向它,所以如果此時進行str3==str4返回值是false,因為兩個物件的地址不一樣,如果是str3.equals(str4),返回true,因為內容相同。

不多說,直接上程式碼:

String str1 = "abcd";

String str2 = "abcd";

String str3 = new String("abcd");

String str4 = new String("abcd");

System.out.println(str1==str2);//true地址一樣

System.out.println(str3==str4);//false,但地址不一樣

System.out.println(str3.equals(str3));//true,值一樣

System.out.println(str2.equals(str3));//true,值一樣

System.out.println((str1+"a")==(str2+"a"));//false;進行了+連線地址不一樣

相關推薦

String new String()的區別

終於開始寫部落格了,心中難免有所激動。今天就給大家帶來String 和 new String()的區分吧。上網查了很多資料,就是我的個人理解,當然也可能有錯誤,但希望對大家有幫助。 記住一點:棧區存引用和基本型別,不能存物件,而堆區存物件。==是比較地址,equals()

Java String new String()的區別

棧區存引用和基本型別,不能存物件,而堆區存物件。==是比較地址,equals()比較物件內容。String str1 = "abcd"的實現過程:首先棧區建立str引用,然後在String池(獨立於棧和堆而存在,儲存不可變數)中尋找其指向的內容為"abcd"的物件,如果Str

StringNew String()的區別

面試中常常會被問到這樣的問題,為此也搜尋閱讀過很多文章,看完之後還是不太明白。 所以希望以個人的見解在此做個總結,為大家提供另外一種理解方式,如有不對之處還請諸位留言! String str ="test"; String str2 =new String ("test")

String new String

都是 == 和equal left ali str 對象 int 一個 String s1=”welcome”;String s2= “welcome:;String s3 =new String(”welcome”

論 java中String new String還有物件中的String字串在記憶體中的儲存

一直以來,所有人都說,java中的String型別是不可變的,可是為什麼不可變確很少有人說的透徹,String和new String的區別,物件中的String和直接定義一個String是否有區別,一直都是一知半解。看了很多文件都是各種猜測,沒有具體程式碼來

Stringnew String的那點事

  String a= "test"; 此語句含義是:在常量池中建立test字串物件,變數aa是對常量池中此物件的引用 String aa = new String("test"); 此語句含義是:如果常量池中沒有test字串物件,會在常量池中建立,並且還會在堆中建立一個test物件,變數a

Java中String直接賦字符串new String區別String str=new String("a")String str = "a"有什麽區別

this his The tin ase name ++ 常量池 TE 百度的面試官問 String A="ABC"; String B=new String("ABC"); 這兩個值,A,B 是否相等,如果都往HashSet裏面放,能放下嗎? 答:A==B 不等,

Java| String s=new String("abc")Stirng s = "abc"的區別

大綱 一.使用""建立String物件的規則(String s1 = "yveshe") 二使用new關鍵字建立String物件的規則(String s= new String("YvesHe")) 三.使用+操作符號建立的String物件 四.`

淺談String str = "" new String()的區別

關於String類的知識經常出現在面試題中,在此先記錄自己的理解。 首先明白一個事,java存在一個常量池,可以用來儲存字串常量。 1 建立的字串變數在記憶體中的區別 兩者看似都是建立了一個字串物件,但在記憶體中確是各有各的想法。 String str1= “abc”; 在編譯期

淺談String str = "" new String()的區別

關於String類的知識經常出現在面試題中,在此先記錄自己的理解。 首先明白一個事,java存在一個常量池,可以用來儲存字串常量。 1 建立的字串變數在記憶體中的區別 兩者看似都是建立了一個字串物件,但在記憶體中確是各有各的想法。 String str1= “abc”

Java| String s=new String("abc")Stirng s = "abc"的區別

本文希望能弄懂的問題: String s=new String(“abc”)和String s = "abc"的區別? 思考: 在Java中,我們是如何建立一個類的例項的? 在我們常用的建立一個類的例項(物件)的方法有以下兩種: 一、使用new建立物件。 二、

java基礎——StringStringBuffer的區別

出了 由於 append 初始 log null 原來 構造函數 創建 首先在java中有三個類來操作字符串: Character 是進行單個字符操作的; String 對一串字符進行操作。不可變類; StringBuffer 也是對一串字符進行操作,但是可變類 Str

字符數組的ss.toString()new String(ss)的問題

arr HA 句柄 str 表現 基本 array OS 循環 int[] a={0, 1, 1, 2, 8, 4, 9}; System.out.println(String.valueOf(a));-----類型+句柄 System.out.print

stringStringBuilder的區別

變量 相對 系統 系統垃圾 中新 nbsp bsp 分配 字符串 string 是 System.String 的別名 。 StringBuilder 適用於對一個字符串進行頻繁的變更操作,因為其效率要比string高一些。 當一個string 變量的值發生變化時,需要在內

關於String str =new String("abc") String str = "abc"的比較

string對象 結果 ofo system 內存區域 code false clas 加載 字符串是一個特殊的對象。字符串一旦初始化就不可以被改變 1. 執行語句String str="abc";時。首先查看字符串池中是否存在字符串"abc",如果存在則直接將“abc”賦

String a = "abc";String b = new String("abc");

String a = "abc"; 首先會在棧中建立一個對String類物件的引用變數a,然後去查詢字串常量池中是否有"abc"。如果有,會把a指向這個物件的地址。如果字串常量池中沒有"abc",則在棧中建立三個char型的值'a','b','c',然後在堆中建立一個String物件o

StringBuffer類的使用詳解底層實現、StringStringBuffer的區別、StringBuffer的常用方法

Java StringBuffer類的使用和詳解底層實現、String和StringBuffer的區別、StringBuffer的常用方法 1.java StringBuffer類 2. StringBuffer類的構造器(構造方法) 3.

JAVA:StringStringBuffer的區別

簡單地說,就是一個變數和常量的關係。StringBuffer物件的內容可以修改;而String物件一旦產生後就不可以被修改,重新賦值其實是兩個物件。 StringBuffer的內部實現方式和String不同,StringBuffer在進行字串處理時,不生成新的物

String a = "abc";String b = new String("abc")建立物件

String a = "abc"; 首先會在棧中建立一個對String類物件的引用變數a,然後去查詢字串常量池中是否有"abc"。如果有,會把a指向這個物件的地址。如果字串常量池中沒有"abc",則在棧中建立三個char型的值'a','b','c',然後在堆中建立一個Stri

String StringBuffer的區別

String: 是物件不是原始型別. 為不可變物件,一旦被建立,就不能修改它的值. 對於已經存在的String物件的修改都是重新建立一個新的物件,然後把新的值儲存進去. String 是final類,即不能被繼承. StringBuffer: 是一個可變物件,當對他進行修