日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

string 相等 java_java中string相等问题(==与.equal的具体区别。求详细解释)

發布時間:2025/4/5 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 string 相等 java_java中string相等问题(==与.equal的具体区别。求详细解释) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

展開全部

這要和String的JVM內部工作原理相結合!

比如:String?s1="accp"

Java內部將此62616964757a686964616fe58685e5aeb931333431366361語句轉化為以下幾個步驟:

(1)先定義一個名為s1的對String類的對象引用變量放到棧中:String?s1;

(2)在常量池(字符串常量池)中查找有沒有存放值為"accp"的地址,如果沒有,則開辟一塊存放字面值為"accp",并將這一塊內存的指向地址放到棧中s1的變量中。如果已經有了值為"accp"的地址,則直接返回這個地址給棧中s1變量。所以如果常量池中已經有的值,直接返回地址就好。

String?s1?=?"accp"; 其字符串值是保存了一個指向常量池中值的引用!

所以s1?和s2的引用地址是相同的,所s1==s2為true

------------------------------------------------------------------------------

而Strings3=newString(s1);

(1)先定義一個名為s3的對String類的對象引用變量放到棧中:String?s3;

(2)在堆中創建一個String類型的對象,這個對象的值,也就是s1的字面值為“accp”。會按照上面的第2的操作到常量池中獲取,并返回一個常量池的引用給堆中的這個對象。

(3) 將堆中創建對象的地址返回給棧中變量s3。

所以?Strings3=newString(s1); 是一個指向堆中對象的引用地址。那么 s1 == s3 為false

下面給一個圖更好理解吧:

對象引用大概圖示

==是比較對象的引用地址,如果要比較對象的值的話用equal吧!

----------擴展-------------------------------------------------------------------

String有一個方法intern(),返回的是這個String對象的常量池引用對象。

如果用

String s4 = s3.intern();

String s5= new String(s1).intern();

則 s1 == s4 和 s1 == s5 都為true

--------備注------------------------------------------------------------------------

這個問題以前的答案由于本人的經驗和能力的不足,導致回答有很多錯誤的地方,在此表示非常抱歉。

總結

以上是生活随笔為你收集整理的string 相等 java_java中string相等问题(==与.equal的具体区别。求详细解释)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。