2013-06-13 2 views
3
{ 
    List list= new ArrayList(); 
    list.add("one"); 
    list.add("second"); 
    System.out.println(list); 
} 

Как можно использовать объект «список», как это было в заявлении на печать? Не нужно ли использовать объект для доступа к методу печати списка?Как println распечатать объект

+0

Эта информация будет распечатана по ссылке объекта «Список» по умолчанию. – Quirin

+0

внутри класса «List» метод toString переопределяется так, что он будет печатать все его содержимое, а не адрес объекта. –

+0

ну, что это означает, что объект списка будет инициализирован функцией Arraylist(). Я думал, что для инициализации объекта можно использовать конструкторы nly? так ли это список List = new List()? – Deepak

ответ

1

Docs Says about toString() in Collections:

Возвращает строковое представление этой коллекции. Строковое представление состоит из списка элементов коллекции в том порядке, в котором они возвращаются его итератором, заключенным в квадратные скобки («[]»). Смежные элементы разделяются символами «,» (запятая и пробел). Элементы преобразуются в строки как по String.valueOf (Object).

2

Вы можете использовать ToString(), который (предположительно) должны быть реализованы для всех объектов:

System.out.println(list.toString()) 

Обратите внимание, что вы не должны использовать возвращенную строку, как все, что вы можете на самом деле синтаксический анализ; это действительно для визуального представления. Он также не должен уникальным представляет объект.

Когда вы пишете

System.out.println(list) 

вы, в самом деле, используя метод toString() неявно.

+4

'System.out.println (list.toString()) == System.out.println (list);' –

+0

так как компилятор выбирает между печатью toString и arraylist? – Deepak

5

prinln(someObject) распечатает все, что было реализовано в toString().

0

Его можно использовать так, потому что класс List наследует класс Object, а класс Object имеет метод toString(), что означает, что каждый объект может быть превращен в строку.

0

Распечатка списка напрямую даст строковое представление списка. Если вы хотите получить доступ к объектам в списке, вам нужно использовать итератор или циклы или расширенные для циклов для коллекций. , например.

for(String s : list){ 
    System.out.println(s); 
    } 

Ну, вы можете изучить и опробовать все методы списка, чтобы изменить его. например добавить, удалить.

Также, если вы печатаете объект, то метод toString() неявно называется.

0

Вы можете просмотреть все элементы в списке, чтобы распечатать их. вы можете сделать это, используя цикл while цикла for.

while (list.hasNext) { 
    System.out.println((String) list.next()); 

}

for(String i in list){ 
    System.out.println(i) ; 

} Не уверен, если это то, что ищете, но его вариант.

1

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

System.out.println(list.toString()); 

ArrayList наследуется от класса java.util.AbstractCollection и что класс имеет ToString() метод. Итак, в вашем случае необходимо выполнить команду toString().

Этот метод toString() возвращает строковое представление этой коллекции. Строковое представление состоит из списка элементов коллекции в том порядке, в котором они возвращаются его итератором, заключенным в квадратные скобки («[]»). Смежные элементы разделяются символами «,» (запятая и пробел). Элементы преобразуются в строки как по String.valueOf (Object).

0

Yo необходимо toString() способ. при печати объекта Reference по умолчанию вызывается метод toString(). Если вы посмотрите на ToString() метод по умолчанию он печатает

getClass().getName() + '@' + Integer.toHexString(hashCode()) 

Теперь в соответствии с вашими требованиями вы можете переопределить для печати значений в списке (String класс переопределяет его тоже)

0

Здесь вы создаете список interface.So это позволит добавлять повторяющиеся значения в список. Также мы можем напрямую печатать объект, например System.out.println (obj); И внутри класса List метод toString переопределяется так, что он будет печатать все его содержимое, а не адрес объекта.

0

System.out.println (Arrays.toString (myList.toArray()));

1

Рассматривая ваши вопросы и комментарии, я думаю, что ваше замешательство в конечном итоге проистекает из того, что вы не знаете, как работает печать. В общем, в таких случаях я рекомендую получить источники JDK и просто заглянуть внутрь.

В этом случае мы бы сначала пойти в System класс и проверить out элемент (потому что println вызывается System.out):

public final class System { 
    ... 
    public final static PrintStream out = null; 

Так как мы теперь знаем, что out является PrintStream, давайте проверим из этого класса:

public class PrintStream extends FilterOutputStream 
    implements Appendable, Closeable 
{ 
    ... 
    public void println(Object x) { 
     String s = String.valueOf(x); 
     synchronized (this) { 
      print(s); 
      newLine(); 
     } 
    } 

(мы знаем, что это вызов этого метода, так как другие println подписи не совпадают с ти ре List)

ОК, поэтому мы видим, что println преобразует данное Object (ваш List в данном случае) к String с помощью String.valueOf(Object). Давайте проверим, что метод:

public final class String { 
    ... 
    public static String valueOf(Object obj) { 
     return (obj == null) ? "null" : obj.toString(); 
    } 

Итак, теперь мы знаем, что ваши List «ы toString() метод используется для генерации выходных данных. Как указывали другие, в ArrayList переопределяется, чтобы обеспечить вывод, который вы видите.

+0

это было потрясающе спасибо !! – Deepak

+0

Рад, что вам понравилось. В общем, не бойтесь заглядывать в JDK - вы ничего не сломаете, и это просто код Java, такой же, как любой, который вы увидите. –

Смежные вопросы