當前位置:編程學習大全網 - 源碼下載 - 采訪jdk源代碼

采訪jdk源代碼

首先批判鬼火狼煙的回答

java中String的++編譯器會自動將String轉換成StringBuffer。

java編程思想第二版附錄A:傳遞和返回對象

中文版,第759頁

英文版1054頁

重載的“+”和StringBuffer部分表示

String類的對象被設計為常量,並使用前面介紹的伴隨類技術。如果妳看壹下JDK文件,

String類(稍後將對其進行總結),您會發現該類中每壹個旨在修改String的方法都在

在修改過程中,確實生成並返回了壹批新的String對象。原始字符串沒有受到影響。

C++的Const提供了編譯器支持的對象恒常性,這是Java所沒有的。想得到壹雙不變的

就像,妳必須自己做,就像繩子壹樣。

因為String對象是常量,所以您可以隨意為壹個字符串取多個別名。因為它是只讀的,任何

壹個引用也不可能修改對象,所以不會影響其他引用。因此,只讀對象很好地解決了別名問題。

標題。

這似乎解決了所有的問題。每當妳需要修改壹個對象時,創建壹堆新的修改過的對象,比如

像這樣的繩子。但是,這對於某些操作來說效率太低。字符串的重載運算符“+”是壹個重

重要的例子。重載意味著“+”被賦予了特定類的額外含義。(對於字符串重載的'+'和'+= ',

是Java中唯壹重載的運算符,Java不允許程序員重載其他運算符。)

使用字符串對象時,'+'用於連接字符串對象:

string s = " ABC "+foo+" def "+integer . tostring(47);

妳可以想象它是如何工作的。字符串“abc”可能有壹個生成連接的append()方法。

添加了新的字符串對象“abc”和foo。新字符串與“def”連接後,生成另壹個新字符串。

諸如此類。

C++允許程序員隨意重載運算符。因為這通常是壹個復雜的過程,所以Java設計者認為這是壹個“壞”的函數。

不應包含在Java中

中等。其實也沒那麽差。具有諷刺意味的是,在Java中使用運算符重載比在C++中容易得多。

當然,這是可以運行的,但是它需要大量的中間字符串對象來生成最終的新字符串,而那些

偶爾,結果需要回收。我懷疑是Java設計者首先這麽做的(這是軟件設計之壹)

教訓是,妳不可能知道壹切,直到它被編碼和工作。我猜他們發現這種做法

無法忍受的低效率。

解決方案是壹個可變的伴生類,類似於前面的例子。String的伴生類稱為StringBuffer,它在

在對壹些表達式求值時,尤其是String對象使用重載的'+'和'+= '時,編譯器會自動創建它們。

字符串緩沖區.以下示例說明了所發生的情況:

//:附錄a:immutable strengs . Java

//演示StringBuffer。

導入com . Bruce eckel . simple test . *;

公共類不可變字符串{

私有靜態測試監視器= new Test();

公共靜態void main(String[] args) {

String foo = " foo

string s = " ABC "+foo+" def "+integer . tostring(47);

system . out . println(s);

//使用StringBuffer的“等效項”:

字符串緩沖器sb =

new string buffer(" ABC ");//創建字符串!

sb .追加(foo);

某人追加(“def”);//創建字符串!

sb . append(integer . tostring(47));

system . out . println(sb);

monitor.expect(新字符串[] {

“abcfoodef47”,

" abcfoodef47 "

});

}

} ///:~

在生成字符串S的過程中,編譯器使用sb執行大致相當於以下工作的代碼:創建壹個

壹個StringBuffer,使用append()直接向這個StringBuffer對象添加壹個新字符串(而不是每

每次都做壹份新的)。雖然這種方法更有效,但對於引號中的字符串,如“abc”

而“def”,是不行的,編譯器會把它變成String對象。因此,盡管StringBuffer提供了

為了提高效率,對象的數量可能比您預期的要多。

String和StringBuffer類

下面總結了String和StringBuffer都可用的方法,可以感受壹下與它們交互的方式。桌子

並不是所有的方法都包括在內,只包括與本討論相關的重要方法。重載方法放在單獨的列中。

第壹個是字符串類:

方法參數,重載用法

構造函數重載:默認值,空參數,創建字符串對象。

字符串、字符串緩沖區、

字符數組,字節數組。

length()字符串中的字符數。

字符串中指定位置的CharAt() int索引。

人物。

Getchars(),復制源的起點和終點,將Char或byte復制到外部。

getBytes()系統中的目標數組,目標數組的數組。

索引。

ToCharArray()生成char[],其中包含String。

的所有字符。

Equals(),比較字符串,兩個字符串的等價性測試。

equals-IgnoreCase()

CompareTo()根據字典順序比較字符串。

和參數,結果是負的,零,

或者正值。情況有所不同。

IndexOf(),重載:char,char和from如果不包含在當前字符串中。

LastIndexOf()以index、String和String參數開頭,返回-1,否則返回參數。

和起始索引。數字在字符串中的位置索引。

LastIndexOf()從末尾開始反轉。

搜索到。

SubString()重載:起始索引,起始索引返回壹個新的字符串對象,package

和終止索引包含特定的字符集。

要連接的Concat()字符串返回壹個新的字符串對象,在原

在字符串後追加參數字符。

Replace()搜索舊字符,用於替換並在指定字符被替換後返回新字符。

新字符串對象。如果沒有發生

替換並返回原始字符串。

生成壹個且只有壹個字符串。

引用。

可以看到,當壹個字符串的內容必須修改時,String的每個方法都會謹慎地返回壹個新的字符串。

對象。另請註意,如果內容不需要修改,該方法將返回對源字符串的引用。這樣可以節省存儲空間。

空間和開銷。

下面是StringBuffer類:

方法參數,重載用法

構造函數重載:空參數,要創建的緩沖區創建壹個新的StringBuffer。

長度,字符串的來源。對象。

ToString()是由這個StringBuffer生成的。

字符串.

length()字符串緩沖區中的字符

號碼。

SetLength()表示緩沖區中字符串的整數長度,用於截斷或擴展原始字符串。

如果擴展,用null填充新的。

空間增大。

CharAt()是壹個整數,表示所需元素的位置。返回緩沖區中的字符。

位置。

SetCharAt()表示所需元素位置的整數,以及新修改位置的值。

的字符值

GetChars()將源的起點和終點以及副本的目的地復制到外圍數組。不

的結束數組和目標數組的索引。字符串中有壹個。

getBytes().

Append()重載:將對象、字符串和參數轉換成字符串,然後追加。

Char[]、char[]和offset sum到達當前緩沖區的末尾,如果

Degree,boolean,char,int,如果需要,緩沖區會被放大。

長型、浮動型、雙型。

Insert()已經重載,第壹個參數是insert,第二個參數轉換成字符串insert。

startpoint:Object的偏移值,進入當前緩沖區的指定位。

String,char[],boolean,set。如果需要,緩沖區將會擴展。

Char,int,long,float,big。

雙份。

最常用的方法是append()。當計算包含“+”和“+=”運算符的字符串表達式時,編譯器將使。

使用它。Insert()方法也有類似的形式,兩種方法都是在緩沖區中做大量的操作,而不需要創建。

新對象。

字符串是特殊的。

到目前為止,您已經看到了String類不同於Java中的壹般類。字符串有許多特殊的功能,

它不僅僅是壹個Java內置類,它已經成為Java的基礎。事實上,用雙引號括起來

字符串都被編譯器轉換成String對象,還有專門重載的'+'和'+= '運算符。在本附錄中,

您還可以看到其他特殊的特性:使用同伴類StringBuffer構造良好的恒常性,以及

壹些額外的神奇功能。

/**********

對象操作是低效的

況且java對象都在堆裏。

原文反復作用於對象。

這純粹是白癡行為

**********/

// **********************************************************

公共靜態字符串countStr(int count)

{

char ch[]= new char[count];

for(int I = 0;我& lt數數;i++)

ch[I]= ' A ';

String str =新字符串(ch);

返回字符串;

}

// **********************************************************

  • 上一篇:普通證券賬戶資金如何劃轉至融資融券賬戶
  • 下一篇:電視解鎖apk安裝
  • copyright 2024編程學習大全網