program story

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

inputbox 2020. 7. 25. 10:53
반응형

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


아무도 클래스 toString()에서 정의 된 메소드 의 개념을 설명 할 수 있습니까 Object? 어떻게 사용되며 목적은 무엇입니까?


보내는 사람 을 Object.toString () 문서 :

객체의 문자열 표현을 반환합니다. 일반적으로 toString 메소드는이 객체를 "텍스트로"나타내는 문자열을 리턴합니다. 결과는 사람이 읽기 쉬운 간결하지만 유익한 표현이어야합니다. 모든 서브 클래스가이 메소드를 대체하는 것이 좋습니다.

Object 클래스의 toString 메소드는 객체가 인스턴스 인 클래스의 이름, at-sign 문자`@ '및 객체의 해시 코드의 부호없는 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());
        }
    }

}

...이 프로그램을 일식에 복사하고 실행하십시오 ... String toString에 대한 아이디어를 얻을 수 있습니다 ...


toString()메서드는 객체 텍스트 표현을 반환 합니다. 기본 구현은 이미 포함되어 java.lang.Object있으므로 모든 객체가 상속하기 때문에 java.lang.ObjectJava의 모든 객체 에이 메소드가 있어야합니다.

디버거는 종종 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. Provide accessors/getters for all of the instance fields that are contained in the string returned. For example, in the Coordinates class,

    public double getX() {
        return x;
    }
    public double getY() {
        return y;
    }
    

A comprehensive coverage of the toString() method is in Item 10 of the book, Effective Java™, Second Edition, By Josh Bloch.


Whenever you access an Object (not being a String) in a String context then the toString() is called under the covers by the compiler.

This is why

Map map = new HashMap();
System.out.println("map=" + map);

works, and by overriding the standard toString() from Object in your own classes, you can make your objects useful in String contexts too.

(and consider it a black box! Never, ever use the contents for anything else than presenting to a human)


Coding:

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;
    }
}

Output:

[Steve 12 Daniel, Sachin 10 Tendulkar]

[Steve 12 Daniel, Sachin 10 Tendulkar, Yuvi 12 Bhajji]

If you are not used toString() in Pojo(Student.java) class,you will get an output like [com.steve.test.Student@6e1408, com.steve.test.Student@e53108].To avoid these kind of issue we are using toString() method.


Correctly overridden toString method can help in logging and debugging of Java.


Apart from what cletus answered with regards to debugging, it is used whenever you output an object, like when you use

 System.out.println(myObject);

or

System.out.println("text " + myObject);

The main purpose of toString is to generate a String representation of an object, means the return value is always a String. In most cases this simply is the object's class and package name, but on some cases like StringBuilder you will got actually a String-text.


If you learn Python first and then Java. I think it plays the same role as __str__() method in Python, it is a magic method like __dict__() and __init__() but to refer to a string representing the the object.


the toString() converts the specified object to a string value.


/**
 * 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();
}

참고URL : https://stackoverflow.com/questions/3615721/how-to-use-the-tostring-method-in-java

반응형