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中是否意味着相同的东西?
答案 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。