Java StringBuffer вопросы - PullRequest
       5

Java StringBuffer вопросы

0 голосов
/ 16 октября 2010
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 одно и то же?

Ответы [ 4 ]

2 голосов
/ 16 октября 2010

Что он имеет в виду, когда говорит, что создает новую строку из элемента данных 'chars'? Я не понимаю, что он хочет, чтобы я сделал. Должен ли я сделать что-то с char charAt (int index)? или что-то вроде этого: StringBuffer sb = new StringBuffer ("test");?

Кто-нибудь из этих вещей создает строку? (Подсказка: нет)

Как создать экземпляр определенного класса в Java? (Подсказка: просмотрите ваши заметки по new. Подсказка 2: посмотрите на javadocs для класса java.lang.String.).

Значит ли конструирование и создание в Java одно и то же?

Java-объекты создаются конструктором, поэтому разумно использовать «конструировать» и «создавать» взаимозаменяемо.

(Технически они не означают одно и то же. Объект создается путем выделения его памяти и вызова конструктора класса. Поэтому, если вы педантичны, конструирование - это часть процесса создания объект. Но не нужно быть педантичным.)

1 голос
/ 16 октября 2010

Вам нужен массив символов, потому что, ну, вы должны где-то хранить символы. Вы можете хранить их в String, но тогда вам не понадобится StringBuffer, смысл которого должен быть более эффективным, чем String (вы обычно используете более эффективные StringBuffer для создания строки, затем используйте .toString() для получения реального String объекта).

Длина будет использоваться для указания длины StringBuffer. Вы можете подумать, что вы могли бы просто использовать длину массива символов, но на самом деле более эффективно при уменьшении размера StringBuffer не перераспределять меньший массив, особенно если вам все равно может понадобиться больше.

Конструктор String, который вам понадобится для этой схемы, будет String (char[] value, int offset, int count) с использованием смещения нуля и счетчика length. Это позволит вам использовать только желаемое подмножество массива char.

1 голос
/ 16 октября 2010

1) Простой способ создать строку из chars:

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

Обратите внимание, что вы, вероятно, не можете просто использовать конструктор String(char[]), потому что существование члена length подразумевает, что некоторые элементы chars могут не использоваться. Если вы не укажете, какие элементы использовать, вы можете получить дополнительные символы (возможно, NUL, может быть мусор) в конце строки.

2) Не совсем. Хотя объект создается (память для самого объекта выделяется) во время вызова конструктора, в то время это просто капля памяти. Объект не полностью создан (читай: любые инварианты класса могут не обязательно выполняться), пока конструктор не вернется. Это означает, что разница между этими двумя понятиями применима только в конструкторе, поэтому люди часто используют слова «создавать» и «конструировать» почти взаимозаменяемо.

0 голосов
/ 16 октября 2010

Как он говорит, взгляните на API, где вы найдете конструктор String, который принимает массив символов: http://download.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#String%28char[]%29.

...