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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java常量字符串String理解

發布時間:2025/5/22 java 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java常量字符串String理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java常量字符串String理解

以前關于String的理解僅限于三點:
1、String 是final類,不可繼承
2、String 類比較字符串相等時時不能用“ == ”,只能用? "equals"
3、String? 類不可更改

String 使用非常方便,因此一般涉及字符串時都用該類進行字符串處理
至于String類的類在機制,則極少去探究。

直到讀到下面這個例子。

class?X
{??
???
public?static?String?strX="hello";
}
class?Y
{
???
public?static?String?strY="hello";
}
class?Z
{
???
public?static?String?strZ="hell"+"o";
}
class?Test
{
???
public?static?void?main(String[]?args)
???{
????????System.out.println(?X.strX
==Y.strY);?
????????System.out.println(?X.strX
==Z.strZ);
????????String?s1
="hel";
????????String?s2
="lo";
????????System.out.println(?X.strX
==(s1+s2));
????????System.out.println(?X.strX
==(s1+s2).intern());
????}
}


按照我的理解,類X,類Y,類Z中的三個常量字符串屬于不同的對象,用 == 操作符比較,那么結果必然是 false,輸出應該為:
false
false
false
false

但實際上輸出確是:
true
true
false
true
使我大惑不解。并因此找了許多資料來看(尤其是C++和Java比較編程,里面解釋比較詳細),終于逐漸明白了原因。

== 只有在兩個比較對象指向同一對象時,其值才為true。X.strX==Y.strY 與 X.strX==Z.strZ 測試結果都為true,說明這三個常量指向的都是同一個對象。
在JAVA中,
String 是字符串常量。由相同序列的字符組成的兩個字符串屬于同一對象,位于內存中的同一個位置。每個字符串常量只有一個 String 對象來表示。即使這個字符串常量出現在一個程序的不同位置甚至一個程序的不同程序包中。也就是說,X.strXY.strY 由于都是同一字符序列,因此 指向的肯定是同一對象。
Z.strZ 也是如此。"hell"+"o",兩個常量字符串相加后,創建了一個新的字符串常量(這個工作是編譯期間完成的),它與 X.strXY.strY有相同的字符序列,因此指向同一對象

雖然一個常量表達式將兩個字符串常量鏈接在一起的結果在編譯器已完成,但是
?String s1="hel";
?String s2="lo";
?String s3=s1+s2;
這段代碼中,s3只能在運行期間創建。這三條語句所創建的"hello"字符串作為String對象存儲在內存中的一個獨立位置。

Java提供一個機制,通過String類定義的intern()方法把一個運行時創建的字符串加到字符串常量池(如果它還沒有入池)。如果上面的三條代碼改為:
?String s1="hel";
?String s2="lo";
?String s3=(s1+s2).intern();
java將把 s1+s2 所返回的字符串對象中的字符序列與已經存儲在字符串常量池中的字符串進行比較。如果找到一個匹配,
intern()就返回這個字符串的引用。如果沒有找到匹配,s1+s2 所返回的字符串將被加入到字符串常量池中,并返回這個字符串常量的引用。
這就解釋了為社么X.strX==(s1+s2)返回false,而X.strX==(s1+s2).intern()返回true。
(s1+s2).intern()指向strX,strY,StrX指向的字符串常量"hello"。

轉載于:https://www.cnblogs.com/marsleoguo/p/3386420.html

總結

以上是生活随笔為你收集整理的Java常量字符串String理解的全部內容,希望文章能夠幫你解決所遇到的問題。

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