13 ответов:
С "объект".toString () docs:
возвращает строковое представление объект. В общем, toString метод возвращает строку, которая "дословно означает" этот объект. Результат должен быть кратким, но информативное представление, которое легко для человека, чтобы читать. Это рекомендуется, чтобы все подклассы переопределить этот метод.
метод toString для объекта класса возвращает строку, состоящую из имя класса объекта является экземпляром, в знак '@', и беззнаковое шестнадцатеричное число представление хэш-кода объект. Другими словами, этот метод возвращает строку, равную значению оф:
getClass().getName() + '@' + Integer.toHexString(hashCode())пример:
String[] mystr ={"a","b","c"}; System.out.println("mystr.toString: " + mystr.toString()); output:- mystr.toString: [Ljava.lang.String;@13aaa14a
использование строки toString: всякий раз, когда вам требуется изучить конструктор с именем value в Строковой форме, вы можете просто использовать String toString... для примера...
package pack1; import java.util.*; class Bank { String n; String add; int an; int bal; int dep; public Bank(String n, String add, int an, int bal) { this.add = add; this.bal = bal; this.an = an; this.n = n; } public String toString() { return "Name of the customer.:" + this.n + ",, " + "Address of the customer.:" + this.add + ",, " + "A/c no..:" + this.an + ",, " + "Balance in A/c..:" + this.bal; } } public class Demo2 { public static void main(String[] args) { List<Bank> l = new LinkedList<Bank>(); Bank b1 = new Bank("naseem1", "Darbhanga,bihar", 123, 1000); Bank b2 = new Bank("naseem2", "patna,bihar", 124, 1500); Bank b3 = new Bank("naseem3", "madhubani,bihar", 125, 1600); Bank b4 = new Bank("naseem4", "samastipur,bihar", 126, 1700); Bank b5 = new Bank("naseem5", "muzafferpur,bihar", 127, 1800); l.add(b1); l.add(b2); l.add(b3); l.add(b4); l.add(b5); Iterator<Bank> i = l.iterator(); while (i.hasNext()) { System.out.println(i.next()); } } }... скопируйте эту программу в Eclipse и запустить его... вы получите идеи о String toString...
The
toString()метод возвращает a текстовое представление объекта. Базовая реализация уже включена вjava.lang.Objectи так, потому что все объекты наследуют отjava.lang.Objectгарантируется, что каждый объект в Java имеет этот метод.переопределение метода-это всегда хорошая идея, особенно когда дело доходит до отладки, потому что отладчики часто показывают объекты на результат
toString()метод. Поэтому используйте значимую реализацию, но используйте ее для технические целей. Логика приложения должна использовать геттеры:public class Contact { private String firstName; private String lastName; public Contact (String firstName, String lastName) { this.firstName = firstName; this.lastName = lastName; } public String getFirstName() {return firstName;} public String getLastName() {return lastName;} public String getContact() { return firstName + " " + lastName; } @Override public String toString() { return "["+getContact()+"]"; } }
он может дополнительно использоваться в контексте приложения, но гораздо чаще он используется для целей отладки. Например, когда вы нажмете точку останова в IDE, гораздо проще прочитать значимый
toString()объектов, чем это для проверки своих членов.нет установленного требования для того, что
toString()метод должен делать. По соглашению, чаще всего он сообщит вам имя класса и значение соответствующих членов данных. Чаще всего,toString()методы автоматически генерируются в IDE.полагаясь на конкретный вывод из A
toString()метод или разбор его в программе-это плохая идея. Что бы вы ни делали, не идут по этому пути.
toString () возвращает строковое/текстовое представление объекта. Обычно используется для диагностических целей, таких как отладка, ведение журнала и т. д., метод toString () используется для чтения значимых сведений об объекте.
он автоматически вызывается, когда объект передается в println, print, printf, String.format (), assert или оператор конкатенации строк.
реализация по умолчанию toString() в объекте класса возвращает строку состоит из имени класса этого объекта, за которым следует @ sign и беззнаковое шестнадцатеричное представление хэш-кода этого объекта с использованием следующей логики,
getClass().getName() + "@" + Integer.toHexString(hashCode())например, следующее
public final class Coordinates { private final double x; private final double y; public Coordinates(double x, double y) { this.x = x; this.y = y; } public static void main(String[] args) { Coordinates coordinates = new Coordinates(1, 2); System.out.println("Bourne's current location - " + coordinates); } }печать
Bourne's current location - Coordinates@addbf1 //concise, but not really useful to the readerтеперь, переопределяя toString () в классе координат, как показано ниже,
@Override public String toString() { return "(" + x + ", " + y + ")"; }результаты
Bourne's current location - (1.0, 2.0) //concise and informativeполезность переопределения toString () становится еще больше при вызове метода в коллекциях, содержащих ссылки на эти объекты. Например, следующее
public static void main(String[] args) { Coordinates bourneLocation = new Coordinates(90, 0); Coordinates bondLocation = new Coordinates(45, 90); Map<String, Coordinates> locations = new HashMap<String, Coordinates>(); locations.put("Jason Bourne", bourneLocation); locations.put("James Bond", bondLocation); System.out.println(locations); }печать
{James Bond=(45.0, 90.0), Jason Bourne=(90.0, 0.0)}вместо этого,
{James Bond=Coordinates@addbf1, Jason Bourne=Coordinates@42e816}несколько советов по выполнению,
- вы должны почти всегда переопределять метод toString (). один из случаев, когда переопределение не требуется, - это служебные классы, которые группируют статические служебные методы, как java.утиль.Математика. Случае переопределение не требуется довольно интуитивно; почти всегда вы знаете.
- возвращаемая строка должна быть краткой и информативной, в идеале самоочевидной.
- по крайней мере, поля, используемые для установления эквивалентности между двумя различными объектами, т. е. поля, используемые в равна() реализация метода должна быть выплюнута методом toString ().
предоставить методы доступа / геттеры для всех полей экземпляра, которые являются содержится в возвращенной строке. Например, в классе координат
public double getX() { return x; } public double getY() { return y; }всестороннее освещение метода toString () находится в пункте 10 книги "эффективная Java™, второе издание" Джоша Блоха.
всякий раз, когда вы обращаетесь к объекту (не являющемуся строкой) в строковом контексте, то toString() вызывается компилятором под обложками.
вот почему
Map map = new HashMap(); System.out.println("map=" + map);работает, и путем переопределения стандартного toString() из объекта в ваших собственных классах вы можете сделать свои объекты полезными и в строковых контекстах.
(и считайте это черным ящиком! Никогда, никогда не используйте содержимое для чего-либо другого, кроме представления человеку)
кодировка:
public class Test { public static void main(String args[]) { ArrayList<Student> a = new ArrayList<Student>(); a.add(new Student("Steve", 12, "Daniel")); a.add(new Student("Sachin", 10, "Tendulkar")); System.out.println(a); display(a); } static void display(ArrayList<Student> stu) { stu.add(new Student("Yuvi", 12, "Bhajji")); System.out.println(stu); } }студент.java:
public class Student { public String name; public int id; public String email; Student() { } Student(String name, int id, String email) { this.name = name; this.id = id; this.email = email; } public String toString(){ //using these toString to avoid the output like this [com.steve.test.Student@6e1408, com.steve.test.Student@e53108] return name+" "+id+" "+email; } public String getName(){ return name; } public void setName(String name){ this.name=name; } public int getId(){ return id; } public void setId(int id){ this.id=id; } public String getEmail(){ return email; } public void setEmail(String email){ this.email=email; } }выход:
[Steve 12 Daniel, Sachin 10 Tendulkar]
[Steve 12 Daniel, Sachin 10 Tendulkar, Yuvi 12 Bhajji]
Если вы не используете toString () в Pojo(Student.java) класс, вы получите вывод, как
[com.steve.test.Student@6e1408, com.steve.test.Student@e53108]. чтобы избежать такого рода проблемы, мы используем toString () метод.
правильно переопределить метод toString, который может помочь в ведение журнала и отладки Java-приложений.
помимо того, что Клетус ответил в отношении отладки, он используется всякий раз, когда вы выводите объект, например, когда вы используете
System.out.println(myObject);или
System.out.println("text " + myObject);
основной целью toString является создание строкового представления объекта, означает, что возвращаемое значение всегда является строкой. В большинстве случаев это просто класс объекта и имя пакета, но в некоторых случаях, таких как StringBuilder, вы получите фактически текст строки.
Если вы сначала изучите Python, а затем Java. Я думаю, что он играет ту же роль, что и
__str__()метод в Python, это магический метод как__dict__()и__init__()но для ссылки на строку, представляющую объект.
/** * This toString-Method works for every Class, where you want to display all the fields and its values */ public String toString() { StringBuffer sb = new StringBuffer(); Field[] fields = getClass().getDeclaredFields(); //Get all fields incl. private ones for (Field field : fields){ try { field.setAccessible(true); String key=field.getName(); String value; try{ value = (String) field.get(this); } catch (ClassCastException e){ value=""; } sb.append(key).append(": ").append(value).append("\n"); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } return sb.toString(); }
Comments