2010-10-16 57 views
0
class MyStringBuffer { 
    //TODO explain: why you would need these data members. 
    private char[] chars; //character storage. 
    private int length; //number of characters used  

public String toString(){ 
     //TODO 

     //Hint: just construct a new String from the ‘chars’ data member 
     //and return this new String – See API online for how create 
     //new String from char[] 

這只是代碼的一部分,我不想發佈整件事情。我只是專注於此,然後在我完全理解時繼續前進。Java StringBuffer問題

1)當他說從'chars'數據成員構造一個新的String時,他是什麼意思?我很困惑他想要我做什麼。我是否想用char charAt(int index)做點什麼?或類似的東西:StringBuffer sb = new StringBuffer("test");

2)在Java中構造和創建意味着什麼?

+0

作業的目的是學習如何構建一個對象。答案很簡單,如果沒有給你答案,很難給你任何提示。我建議你看看如何用參數創建一個對象。你的問題中有一個例子。 – 2010-10-16 09:46:05

+0

@Peter Lawrey好的謝謝 – CuriousStudent 2010-10-16 09:50:38

回答

1

1)最簡單的方法來創建chars的字符串:

String result = new String(chars, 0, length); 

注意,你可能無法只使用String(char[])構造,因爲length成員的存在暗示着chars某些元素可能不被使用。如果你沒有指定要使用的元素,你可能會在字符串的末尾添加額外的字符(也許NULs,也許是垃圾)。

2)不完全。在構造函數被調用時創建對象(分配對象本身的內存)的同時,它只是一塊內存。在構造函數返回前,該對象沒有完全構造(讀取:任何類不變量不一定成立)。這意味着兩者之間的區別僅適用於構造函數,所以人們通常可以幾乎可以互換地使用「創建」和「構造」。

+0

@cHao嗨,回報它,簡直就是這樣嗎? return result.toString(); – CuriousStudent 2010-10-16 10:01:03

+0

@CuriousStudent:更簡單。一旦你有了字符串,你可以'返回結果;'。 – cHao 2010-10-16 10:03:21

+0

@cHao哦好吧,只是好奇,但是如果我去與result.toString();?即時通訊將改變它返回結果;但我只是想知道 – CuriousStudent 2010-10-16 10:05:30

0

正如他所說,查看一下API,您將在其中找到一個String構造函數,該構造函數接收一組字符:http://download.oracle.com/javase/1.5.0/docs/api/java /lang/String.html#String%28char[]%29。

+0

嗨,我想我想用這個。 public String(char [] value),但似乎沒有解釋如何使用它。當我把它複製並粘貼在那裏時,它說非法表達開始。 對不起,如果這是一個愚蠢的問題,我只是想學習。 – CuriousStudent 2010-10-16 09:29:19

+1

'公共字符串(char []值)'是一個字符串構造函數,所以你可以把它叫做'new String(value)'。 – cHao 2010-10-16 09:55:11

1

您需要一個字符數組,因爲,您必須將字符存儲在某處。您可以他們存儲在String但你不會有什麼需要的StringBuffer的,其存在的理由是更有效率比String(你generaly使用更高效的StringBuffer構造一個字符串,然後使用.toString()來得到一個真實的String對象)。

長度將用於指定StringBuffer的長度。你可能只是使用字符數組的長度,但它實際上更有效率,當減小StringBuffer的大小時,不要重新分配更小的數組,尤其是如果您最終可能最終需要更多的數組。

您需要此方案的String構造函數將是String (char[] value, int offset, int count),其偏移量爲零,計數爲length。這將允許您僅使用char陣列的所需子集。

+0

我明白了,這很有道理。謝謝! – CuriousStudent 2010-10-16 09:47:34

2

當他說從'chars'數據成員構造一個新的String時,他是什麼意思?我很困惑他想要我做什麼。我想用char charAt(int index)做些什麼?或者像這樣的東西:StringBuffer sb = new StringBuffer(「test」);?

這些事情中的任何一個創建一個字符串? (提示:否)

如何在Java中創建特定類的實例? (提示:請在new上查看您的筆記。提示2:查看java.lang.String類的javadoc。)。

在Java中構造和創建平均值是否相同?

Java對象是由構造函數創建的,因此交替使用「構造」和「創建」是合理的。一個對象是通過分配內存和調用一個類的構造函數來創建的,所以如果你是迂腐的,那麼創建一個對象的過程的構造就是部分。但是沒有必要迂腐。)