⑴ java:請教關於String對象的重新賦值
String類的源代碼如下:
/** The value is used for character storage. */
private final char value[];
首先你要明白,字元串的本質是一個字元數組。
value屬性用來存放字元串中的字元,是一個final屬性,即:不可被修改的屬性。
所以,每當你要改變這個字元串的值時,都會在原來字元串的基礎上產生一個新的字元串。
原來的字元串保持不變。即你說的:如果要改變則需要先斷開原有的對象引用,再開辟新的對象,之後再指向新的對象空間.
⑵ java源代碼String類的問題
1、count是傳入的參數(也就是original)的長度,可以看src下的注釋:
/** The count is the number of characters in the String. */
所以一開始不是0,而是original.length()
2、count是私有成員,private修飾的意思就是說只有在類的內部可以使用,因此在String類的內部可以直接訪問其他String類的內部函數
⑶ java 中string類怎麼實現
ava字元串類(java.lang.String)是Java中使用最多的類,也是最為特殊的一個類,很多時候,我們對它既熟悉又陌生。
一、從根本上認識java.lang.String類和String池
首先,我建議先看看String類的源碼實現,這是從本質上認識String類的根本出發點。從中可以看到:
1、String類是final的,不可被繼承。public final class String。
2、String類是的本質是字元數組char[], 並且其值不可改變。private final char value[];
然後打開String類的API文檔,可以發現:
3、String類對象有個特殊的創建的方式,就是直接指定比如String x = "abc","abc"就表示一個字元串對象。而x是"abc"對象的地址,也叫
做"abc"對象的引用。
4、String對象可以通過「+」串聯。串聯後會生成新的字元串。也可以通過concat()來串聯,這個後面會講述。
6、Java運行時會維護一個String Pool(String池),JavaDoc翻譯很模糊「字元串緩沖區」。String池用來存放運行時中產生的各種字元串,
並且池中的字元串的內容不重復。而一般對象不存在這個緩沖池,並且創建的對象僅僅存在於方法的堆棧區。
⑷ java編程中把類名設置為了String,以後的Java源碼無法編譯報錯如下,請問如何解決
第一個錯誤,jdk編譯的時候 不知道這個 myqq 是個啥,你也沒有貼出來代碼,我估計是這個變數定義有問題
第二個錯誤,自己定義的String類 跟jdk自帶的String類沒有任何關系,無法強制轉換,肯定會報錯,這就相當於你 把java中的 Integer 強制轉換成 Student 類,從根上就不一樣
⑸ Java string源碼中的屬性value是如何被賦值的
Java string源碼中的value是通過一個stringbuffer數組賦值的。
⑹ java中String是什麼
Java字元串,在開發中用的是比較頻繁的一個類,我們平時要表達一句話的含義,就可以使用字元串(String)來詳細的描述;
Java中已經將字元串進行了很好的封裝,我們可以使用String類將字元串進行隨意的操作,比如字元串的反轉,字元串的分割,字元串的拼接等。
Java String類提供了很多的構造方法,他可以根據我們傳入的不同的參數,轉換成我們想要的數據;比如可以將字元數組,位元組數據,ASCII碼數組轉換為字元串,而且可以根據傳入的參數,判斷將數據的哪些位置的內容轉換為字元串;
在java中除了String之外還有幾個常用的字元串類StringBuffer和StringBuilder,在執行效率方面StringBuilder最快,String最慢,在Java源碼中,String類裡面有個常量private final char value[];用來存儲字元串信息,多以對象一旦創建成功之後,內容就不會改變,但實際上修改值得時候,是不斷的創建回收內容,所以String速率最慢;StringBuffer和StringBuilder都是繼承於AbstractStringBuilder這個類,在這個類中有個變數char[] value;數組進行字元串內容的存儲,變數是可變的,所以不用隨時去分配空間,速度相對於String就會快;對於StringBuffer和StringBuffer兩個類,在源碼中由於StringBuffer中很多方法都被synchronized修飾,所以StringBuffer是線程安全的,也是由於這個原因,StringBuffer速度就相對於StringBuilder慢;
在我們操作比較少量的數據的時候可以使用String,如果數據在多個線程中共享,需要考慮到線程安全,可以使用StringBuffer;
以下為java中String常用的方法示例:
更多java學習方面的問題可以訪問這個網頁,網頁鏈接,希望我的回答能幫到你。
⑺ 如何查看java string源碼
java查某個類的源碼可以通過jar包
例如查看java.lang.Integer源代碼
把src解壓了就行了啊,然後打開解壓後的src文件夾下的java/long/ 就有Integer.java文件了
⑻ 關於JAVAString類equals方法的源代碼
Sting創建的是兩個對象,一個是存在常量池中,還有一個是存在對象棧中。
⑼ String類源碼筆記(一):成員變數和構造器
String類表示字元串,所有類似"abc"形式的字元串(或魔法字元串)都被看作是這個類的實例。String是不可變的,當一個字元串在常量池中被創建時,他的值就不會被改變。
所在路徑:javalangString.java
為了保證String類是一個不可變類,String類的成員變數多為私有和不可變的。
其中serialPersistentFields在序列化時使用:
JDK8的String類一共有16個構造器,其中兩個是@Deprecated,一個是私有構造器,剩下的13個是可以調用的。
無參構造器直接將""的value賦值給當前類的value。""的value是一個空的char[],其length為0。調用使用了無參構造器的String對象的isEmpty()方法會得到true,調用length()方法會得到0,判斷其==null會得到false。
入參為String對象時,構造器會對其進行直接取值。
入參為字元串數組時,構造器調用的是Arrays.Of()方法。
其中Arrays.Of()方法是為了將入參的字元串序列深拷貝到this.valuie中,他的源碼為:
其中System.array()方法的源碼為:
這個方法支持直接傳入想要生成的String的母串,通過偏移量和有效長度找出需要賦值給this.value的部分,然後調用Arrays.OfRange()方法進行深拷貝。
當需要將一個Unicode編碼序列轉換為String時,可以使用以下構造器:
當需要將一個bytes[]轉換為String時,可以使用以下構造器:
此外,還有一些將上述構造器進一步封裝的構造器,其本質都是簡化入參。另外,String類的構造器同樣支持傳入StringBuffer和StringBuilder。如果傳入的是StringBuffer,構造器會為其加鎖。如果傳入的是StringBuilder則不會加鎖。
事實上,StringBuffer和StringBuilder的toString()方法調用的也是String類的構造器,他們最終的底層實現都是Arrays.Of()。
最後,String類還提供了一個保護類型的構造方法。該方法相比入參為char[]的構造器多了一個share參數,這個參數並沒有實際作用,只是用來和其他構造器進行區分。當String類內部調用該構造器時:
該構造器不能對外暴露的原因是需要保持String類的不可變性。
⑽ java中string的源碼怎麼在eclipse中查看
你要先將java的源碼包在eclipse設置一下,在查看Sstring類的時候,直接ctrl+滑鼠左鍵點擊類型名稱即可進入對應的源碼文件,設置源碼包你需要網路一下,我好久前的了