你要先將java的源碼包在eclipse設置一下,在查看Sstring類的時候,直接ctrl+滑鼠左鍵點擊類型名稱即可進入對應的源碼文件,設置源碼包你需要網路一下,我好久前的了
㈡ 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是什麼
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中的equals方法的源代碼有很多不懂啊求大神解惑!!
anObject instanceof String;
首先上邊的語句,先判斷anObject是不是String類的一個實例,如果是運行下邊的語句
String anotherString = (String)anObject;
字元串是一個引用數據類型,本身是String個對象,
在這里把傳進來的anObject這個對象,賦給anotherString (需要類型轉換)
他當然可以調用String類里的成員,你說的count、value、offset都是String的成員
int n = count;//這個count是原始字元串的長度
if (n == anotherString.count) { //把字元串長度和要比較的字元串長度對比,長度都不同的話就不用比字元串內容了
char v1[] = value;//把原始字元串義字元形式存入數組
char v2[] = anotherString.value; //把要比較字元串義字元形式存入數組
int i = offset;//數組下標
int j = anotherString.offset; //????
while (n-- != 0) { //遍歷數組,比較 數組元素是否相同
if (v1[i++] != v2[j++])
return false;//在遍歷的過程中如果有不同的就返回false;
} //你如果用過equals這個方法應該知道它返回的是boolean值
return true;
}
}
return false;
}
㈤ 如何能看到java中string類的實現源代碼
首先,需要下載JDK源代碼(Oracle官網找或者搜一下,到處都有),一般會打成zip包做下載,下載後並不需要進行解壓;
然後,可使用以下幾種方式將class文件與源文件進行關聯:
(1) 如果你沒有進行關聯過,可以在Editor中寫下如下的語句:
String str = null;
然後按住Ctrl鍵, 用滑鼠左鍵點擊"String",
就會彈出 Class File Editor 的界面讓你關聯源文件,
點擊界面上的"Attach Source..."按鈕,
在彈出的"Source Attachment Configuration"界面中,
點擊"External File", 選擇你下載的源文件zip包,一路OK即可;
(2) 在項目中找到 JRE System Library,定位到如下:
JRE System Library -> rt.jar -> java->lang->String.class
雙擊String.class,即彈出關聯源文件的界面;
(3) 在項目中找到 JRE System Library, 定位到 rt.jar,
滑鼠右鍵點擊,在彈出的界面中選擇"Properties...",
在彈出的界面中,左邊默認會選中"Java Source Attachment",
在右邊進行源文件的關聯;
(4) Window->Preferences->Java->Installed JREs
在右邊的"Installed JREs:"窗口中選中所使用的JRE,
點擊其右邊的"Edit",在彈出的"Edit JRE"窗口中,
有一個"JRE system libraries:"列表,
在其中找到 "...jdk1.6.0_13\jre\lib\rt.jar" 並選中,
點擊右邊的"Source Attachment...",
在彈出的"Source Attachment Configuration"界面中,
點擊文本框右邊的"External File",
選擇你下載的源文件zip包,一路OK即可;
㈥ 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類!!!!
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池用來存放運行時中產生的各種字元串,
並且池中的字元串的內容不重復。而一般對象不存在這個緩沖池,並且創建的對象僅僅存在於方法的堆棧區。
5、創建字元串的方式很多,歸納起來有三類:
其一,使用new關鍵字創建字元串,比如String s1 = new String("abc");
其二,直接指定。比如String s2 = "abc";
其三,使用串聯生成新的字元串。比如String s3 = "ab" + "c";
二、String對象的創建
String對象的創建也很講究,關鍵是要明白其原理。
原理1:當使用任何方式來創建一個字元串對象s時,Java運行時(運行中JVM)會拿著這個X在String池中找是否存在內容相同的字元串對象,
如果不存在,則在池中創建一個字元串s,否則,不在池中添加。
原理2:Java中,只要使用new關鍵字來創建對象,則一定會(在堆區或棧區)創建一個新的對象。
原理3:使用直接指定或者使用純字元串串聯來創建String對象,則僅僅會檢查維護String池中的字元串,池中沒有就在池中創建一個,有則罷
了!但絕不會在堆棧區再去創建該String對象。
原理4:使用包含變數的表達式來創建String對象,則不僅會檢查維護String池,而且還會在堆棧區創建一個String對象。
另外,String的intern()方法是一個本地方法,定義為public native String intern(); intern()方法的價值在於讓開發者能將注意力集中到
String池上。當調用 intern 方法時,如果池已經包含一個等於此 String 對象的字元串(該對象由 equals(Object) 方法確定),則返回池
中的字元串。否則,將此 String 對象添加到池中,並且返回此 String 對象的引用。
三、不可變類
不可改變的字元串具有一個很大的優點:編譯器可以把字元串設置為共享。
不可變類String有一個重要的優點-它們不會被共享引用。
是這樣的,JAVA為了提高效率,所以對於String類型進行了特別的處理---為string類型提供了串池
定義一個string類型的變數有兩種方式:
string name= "tom ";
string name =new string( "tom ")
使用第一種方式的時候,就使用了串池,
使用第二中方式的時候,就是一種普通的聲明對象的方式
如果你使用了第一種方式,那麼當你在聲明一個內容也是 "tom "的string時,它將使用串池裡原來的那個內存,而不會重新分配內存,也就是說,string saname= "tom ",將會指向同一塊內存
另外關於string類型是不可改變的問題:
string類型是不可改變的,也就是說,當你想改變一個string對象的時候,比如name= "madding "
那麼虛擬機不會改變原來的對象,而是生成一個新的string對象,然後讓name去指向它,如果原來的那個 "tom "沒有任何對象去引用它,虛擬機的垃圾回收機制將接收它。
據說這樣可以提高效率!!!
㈧ Java String不可更改的, 源碼:private final char value[];如果String a ="a";String b ="b" ;a=b;
此更改非彼更改。a=b這種方式是賦值,賦的是引用地址。
舉個例子:
String a ="a" 這句話,就創建了一個對象值為a,地址比如說是01
String b ="b" 這句話,創建了一個對象值為b,地址比如說是02
a=b 只是把02這個地址賦給了a,換句話說a指定地址02,02代表了b。但是01地址代表的a還存在啊,你根本沒有改變01地址代表的值,只是說01這個地址沒有引用而已,所以說這個a你永遠也改變不了,這就是string的特性。