Java StringBuffer问题

时间:2010-10-16 09:14:50

标签: java stringbuffer

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[]

这只是代码的一部分,我不想发布整个事情。我只关注这一点,然后在我完全理解它的时候继续前进。

1)当他说'chars'数据成员构建一个新的String时,他的意思是什么?我很困惑他想要我做什么。我想用char charAt(int index)做些什么吗?或类似的东西:StringBuffer sb = new StringBuffer("test");

2)构造和创建在Java中是否意味着相同的东西?

4 个答案:

答案 0 :(得分:2)

  

当他说从'chars'数据成员构造一个新String时,他的意思是什么?我很困惑他想要我做什么。我想用char charAt(int index)做点什么吗?或类似的东西:StringBuffer sb = new StringBuffer(“test”);?

这些事情中的任何一个都会创建一个String吗? (提示:不)

如何在Java中创建特定类的实例? (提示:在new上查看你的笔记。提示2:查看java.lang.String类的javadoc。)。

  

构造和创建在Java中是否意味着相同的东西?

Java对象是由构造函数创建的,因此可以交替使用“构造”和“创建”。

(从技术上讲,它们并不意味着完全相同的东西。通过分配内存并调用类构造函数来创建对象。所以,如果你是迂腐的,那么构造是 part 的过程。创造一个对象。但没有必要迂腐。)

答案 1 :(得分:1)

你需要一组字符,因为你必须将字符存储在某个地方。你可以将它们存储在String中,但是你几乎不需要StringBuffer,其存在的理由比String更有效率(通常使用效率更高的StringBuffer来构造字符串,然后使用.toString()来获取真正的String对象。

长度将用于指定StringBuffer的长度。您可能只需使用字符数组的长度,但实际上在减小StringBuffer的大小时更有效,而不是重新分配更小的数组,特别是如果您可能最终需要更多

此方案所需的String构造函数为String (char[] value, int offset, int count),偏移量为零,计数为length。这将允许您仅使用char数组的所需子集。

答案 2 :(得分:1)

1)从chars创建字符串的简便方法:

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

注意,您可能不能只使用String(char[])构造函数,因为length成员的存在意味着可能不会使用chars的某些元素。如果你没有指定要使用的元素,你最终可能会在字符串的末尾添加额外的字符(可能是NUL,可能是垃圾)。

2)不完全是。当构造函数被调用时,对象被创建(对象本身分配的内存),那时它只是一块内存。在构造函数返回之前,对象未完全构造(读取:任何类不变量可能不一定保持)。这意味着两者之间的区别仅适用于构造函数,因此人们通常可以交替使用“创建”和“构造”。

答案 3 :(得分:0)

正如他所说,看一下API,你会发现一个带有一系列字符的String构造函数:http://download.oracle.com/javase/1.5.0/docs/api/java/ lang / String.html #String%28char []%29。