[java] Java에서 toString 메소드를 사용하는 방법은 무엇입니까?

누구든지 클래스에 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}

몇 가지 구현 포인터,

  1. 거의 항상 toString () 메서드를 재정의해야합니다. 재정의가 필요하지 않은 경우 중 하나는 java.util.Math 방식으로 정적 유틸리티 메서드를 그룹화하는 유틸리티 클래스입니다 . 재정의가 필요하지 않은 경우는 매우 직관적입니다. 거의 항상 알 것입니다.
  2. 반환 된 문자열은 간결하고 정보를 제공해야하며 이상적으로는 자명해야합니다.
  3. 적어도 두 개의 다른 객체 사이의 동등성을 설정하는 데 사용되는 필드, 즉 equals () 에서 사용되는 필드 메서드 구현에 는 toString () 메서드에 의해 뱉어 져야합니다.
  4. 반환 된 문자열에 포함 된 모든 인스턴스 필드에 접근 자 / 게터를 제공합니다. 예를 들어 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 컨텍스트에서도 객체를 유용하게 만들 수 있습니다.

(그리고 그것을 블랙 박스라고 생각하세요! 절대로 사람에게 제시하는 것 외에 다른 용도로 콘텐츠를 사용하지 마십시오)