2010-10-16 62 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对象是由构造函数创建的,因此交替使用“构造”和“创建”是合理的。一个对象是通过分配内存和调用一个类的构造函数来创建的,所以如果你是迂腐的,那么创建一个对象的过程的构造就是部分。但是没有必要迂腐。)