누구든지 클래스에 toString()
정의 된 메서드 의 개념을 설명해 줄 수 있습니까 Object
? 어떻게 사용되며 그 목적은 무엇입니까?
답변
로부터 Object.toString
문서 :
객체의 문자열 표현을 반환합니다. 일반적으로
toString
메서드는이 개체를 “텍스트로 나타내는”문자열을 반환합니다. 그 결과는 사람이 읽기 쉬운 간결하지만 유익한 표현이어야합니다. 모든 하위 클래스가이 메서드를 재정의하는 것이 좋습니다.
toString
클래스의 방법은Object
객체가 인스턴스, 상기 서명 문자 ‘로되어있는 클래스의 이름 구성된 문자열 (@), 및 오브젝트의 해시 코드의 부호 없음 16 진 표현을 반환합니다. 즉,이 메서드는 다음 값과 같은 문자열을 반환합니다.
getClass().getName() + '@' + Integer.toHexString(hashCode())
예:
String[] mystr ={"a","b","c"};
System.out.println("mystr.toString: " + mystr.toString());
output:- mystr.toString: [Ljava.lang.String;@13aaa14a
답변
사용 String.toString
:
String
양식 에서 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
.
답변
이 toString()
메서드는 개체 의 텍스트 표현을 반환 합니다. 기본 구현이 이미 포함되어 java.lang.Object
있으므로 모든 객체가java.lang.Object
Java의 모든 객체에이 메소드가 있음을 보장합니다.
메서드를 재정의하는 것은 특히 디버깅과 관련하여 항상 좋은 생각입니다. 디버거는 toString()
메서드 의 결과에 따라 개체를 표시하는 경우가 많기 때문 입니다. 따라서 의미있는 구현을 사용하되 기술적 목적으로 사용하십시오 . 애플리케이션 로직은 getter를 사용해야합니다.
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에서 자동 생성됩니다.
toString()
메서드의 특정 출력에 의존 하거나 프로그램 내에서 구문 분석하는 것은 나쁜 생각입니다. 당신이 무엇을 하든지 그 길을 따라 가지 마십시오.
답변
toString () 은 객체의 문자열 / 텍스트 표현을 반환합니다. 디버깅, 로깅 등과 같은 진단 목적으로 일반적으로 사용되는 toString () 메서드는 객체에 대한 의미있는 세부 정보를 읽는 데 사용됩니다.
객체가 println, print, printf, String.format (), assert 또는 문자열 연결 연산자에 전달 될 때 자동으로 호출됩니다.
Object 클래스에서 toString ()의 기본 구현은 다음 논리를 사용하여이 객체의 클래스 이름 뒤에 @ 기호와이 객체의 해시 코드의 부호없는 16 진수 표현으로 구성된 문자열을 반환합니다.
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
이제 아래와 같이 Coordinates 클래스에서 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.util.Math 방식으로 정적 유틸리티 메서드를 그룹화하는 유틸리티 클래스입니다 . 재정의가 필요하지 않은 경우는 매우 직관적입니다. 거의 항상 알 것입니다.
- 반환 된 문자열은 간결하고 정보를 제공해야하며 이상적으로는 자명해야합니다.
- 적어도 두 개의 다른 객체 사이의 동등성을 설정하는 데 사용되는 필드, 즉 equals () 에서 사용되는 필드 메서드 구현에 는 toString () 메서드에 의해 뱉어 져야합니다.
-
반환 된 문자열에 포함 된 모든 인스턴스 필드에 접근 자 / 게터를 제공합니다. 예를 들어 Coordinates 클래스에서
public double getX() { return x; } public double getY() { return y; }
toString () 메소드에 대한 포괄적 인 내용은 Josh Bloch 저서, Effective Java ™, Second Edition의 항목 10에 있습니다.
답변
코딩 :
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);
}
}
Student.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]
Pojo (Student.java) 클래스에서 toString ()을 사용하지 않으면 [com.steve.test.Student@6e1408, com.steve.test.Student@e53108]
. 이러한 종류의 문제를 피하기 위해 toString () 메서드를 사용하고 있습니다.
답변
String 컨텍스트에서 Object (String이 아님)에 액세스 할 때마다 컴파일러에 의해 내부적으로 toString ()이 호출됩니다.
이는 이유
Map map = new HashMap();
System.out.println("map=" + map);
작동하며 자신의 클래스에서 Object의 표준 toString ()을 재정 의하여 String 컨텍스트에서도 객체를 유용하게 만들 수 있습니다.
(그리고 그것을 블랙 박스라고 생각하세요! 절대로 사람에게 제시하는 것 외에 다른 용도로 콘텐츠를 사용하지 마십시오)