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

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

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

2) 在 Java 中,construct 和 create 的意思是一样的吗?

4

4 回答 4

2

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

这些东西中的任何一个都会创建一个字符串吗?(提示:没有)

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

在 Java 中,construction 和 create 是同一个意思吗?

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

(从技术上讲,它们的含义并不完全相同。对象是通过分配其内存并调用类构造函数来创建的。因此,如果您是迂腐的,构造是创建对象过程的一部分。但没有必要这样做迂腐。)

于 2010-10-16T09:56:32.463 回答
1

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

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

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

于 2010-10-16T09:45:26.533 回答
1

1) 从以下位置创建字符串的简单方法chars

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

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

2)不完全是。虽然在调用构造函数时创建了对象(为对象本身分配的内存),但那时它只是一块内存。在构造函数返回之前,该对象并未完全构造(阅读:任何类不变量可能不一定成立)。这意味着两者之间的区别仅适用于构造函数,因此人们通常可以互换使用“create”和“construct”。

于 2010-10-16T09:52:06.987 回答
0

正如他所说,查看 API,您将在其中找到一个 String 构造函数,该构造函数采用一组字符:http://download.oracle.com/javase/1.5.0/docs/api/java/lang/String .html#String%28char[]%29 。

于 2010-10-16T09:17:50.360 回答