public class Car {
String model;
public Car(String model) {
this.model = model;
}
@Override
public String toString() {
return "Car{" +
"model='" + model + '\'' +
'}';
}
}
public class Test {
public static void main(String[] args) {
LinkedList<Car> cars = new LinkedList<>();
Car ferrari = new Car("Ferrari 360 Spider");
Car bugatti = new Car("Bugatti Veyron");
Car lambo = new Car("Lamborghini Diablo");
Car ford = new Car("Ford Mondeo");
Car fiat = new Car("Fiat Ducato");
cars.add(ferrari);
cars.add(bugatti);
cars.add(lambo);
System.out.println(cars);
cars.addFirst(ford);
cars.addLast(fiat);
System.out.println(cars);
}
}
Этот код выведет в консоль:
[Car{model='Ferrari 360 Spider'}
, и тд.
Если удалить toString()
метод в классе Car
, то мы получим:
[Car@7c75222b, и тд.
Мне интересно одно, когда мы переопределили метод toString()
в классе Car
и он отрабатывал, но мы же не пишем cars.toString()
, а просто System.out.println(cars);
и это работает, как так?
В реализации метода println() обратите внимание на String s = String.valueOf(x);
/**
* Prints an Object and then terminate the line. This method calls
* at first String.valueOf(x) to get the printed object's string value,
* then behaves as
* though it invokes <code>{@link #print(String)}</code> and then
* <code>{@link #println()}</code>.
*
* @param x The <code>Object</code> to be printed.
*/
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
а valueOf(x) в свою очередь вызывает .toString()
/**
* Returns the string representation of the {@code Object} argument.
*
* @param obj an {@code Object}.
* @return if the argument is {@code null}, then a string equal to
* {@code "null"}; otherwise, the value of
* {@code obj.toString()} is returned.
* @see java.lang.Object#toString()
*/
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
У меня есть клиент-серверное приложениеСерверная часть написана на Spring boot
Java ДженерикиРастолкуйте объявление для чайников, сигнатуру объявления что делает ? super T читаю, не особо могу вникнуть
Я понимаю что в java "строгая типизация"Однако, если например я сделал множество приведений в коде и хочу вывести тип переменной в конце, как...