toString 방법 정보

29977 단어 toString
toString 메서드는 객체 값을 나타내는 문자열에 사용됩니다.
절대 다수의 toString 방법은 이런 형식을 따른다. 클래스의 이름은 그 다음에 상대방의 괄호로 묶인 필드 값이다.다음은 Employee 클래스의 toString 메서드 구현(뒤에 전체 프로그램 첨부)입니다.
4public String toString()
{
return"Employee[name"+name+",salary="+salary+",hireDay="+hireDay+"]";
}
실제적으로 더 잘 설계할 수 있다. getClass()를 호출하는 것이 가장 좋다.getName () 은 toString 방법에 클래스 이름을 억지로 추가하지 않고 문자열을 가져옵니다.public String toString()
{
return getClass().getName()+"[name+"+name+",salary="+salary+ ",hireDay="+hireDay+"]"; }
toString 방법도 하위 클래스에서 호출할 수 있습니다.물론 하위 클래스를 디자인할 때도 자신의 tostring 방법을 정의하고 하위 클래스의 설명을 추가해야 한다.만약 슈퍼클래스가 getClass를 사용했다면 ().getName (), 하위 클래스는 슈퍼만 호출합니다.toString()만 있으면 됩니다. 예를 들어, Manager 클래스의 toString 방법은 다음과 같습니다.Class Manager extends Employee
{
.......
public String toString()
{
return super.toString()
+"[bonus="+bonus+"]";
}
}

tostring 호출: 대상과 문자열이 조작부호 '+' 를 통해 연결되면 자바 컴파일러는 자동으로 tostring 방법을 호출하여 대상 문자열 설명을 얻을 수 있습니다.예를 들면 다음과 같습니다.Point p=new Point(10,20);
String message="The current position is"+p;
//automatically invokes p.toString()
자신이 쓴 모든 종류에 토스트링 방법을 추가하는 것을 강력히 권장합니다.이렇게 하면 스스로 이익을 얻을 뿐만 아니라, 이 종류를 사용하는 모든 프로그래머도 적지 않은 이익을 얻을 수 있다.
다음 프로그램은 Employee와 Manager류의 toString, equals와hashCode 방법을 실현했습니다.import java.util.*;

public class EqualsTest
{
public static void main(String[] args)
{
Employee alice1 = new Employee("Alice Adams", 75000, 1987, 12, 15);
Employee alice2 = alice1;
Employee alice3 = new Employee("Alice Adams", 75000, 1987, 12, 15);
Employee bob = new Employee("Bob Brandson", 50000, 1989, 10, 1);

System.out.println("alice1 == alice2: " + (alice1 == alice2));

System.out.println("alice1 == alice3: " + (alice1 == alice3));

System.out.println("alice1.equals(alice3): " + alice1.equals(alice3));

System.out.println("alice1.equals(bob): " + alice1.equals(bob));

System.out.println("bob.toString(): " + bob);

Manager carl = new Manager("Carl Cracker", 80000, 1987, 12, 15);
Manager boss = new Manager("Carl Cracker", 80000, 1987, 12, 15);
boss.setBonus(5000);
System.out.println("boss.toString(): " + boss);
System.out.println("carl.equals(boss): " + carl.equals(boss));
System.out.println("alice1.hashCode(): " + alice1.hashCode());
System.out.println("alice3.hashCode(): " + alice3.hashCode());
System.out.println("bob.hashCode(): " + bob.hashCode());
System.out.println("carl.hashCode(): " + carl.hashCode());
}
}

class Employee
{
public Employee(String n, double s, int year, int month, int day)
{
name = n;
salary = s;
GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
hireDay = calendar.getTime();
}

public String getName()
{
return name;
}

public double getSalary()
{
return salary;
}

public Date getHireDay()
{
return hireDay;
}

public void raiseSalary(double byPercent)
{
double raise = salary * byPercent / 100;
salary += raise;
}

public boolean equals(Object otherObject)
{
// a quick test to see if the objects are identical

if (this == otherObject) return true;

// must return false if the explicit parameter is null

if (otherObject == null) return false;

// if the classes don't match, they can't be equal

if (getClass() != otherObject.getClass())
return false;

// now we know otherObject is a non-null Employee

Employee other = (Employee) otherObject;

// test whether the fields have identical values

return name.equals(other.name)
&& salary == other.salary
&& hireDay.equals(other.hireDay);
}

public int hashCode()
{
return 7 * name.hashCode()
+ 11 * new Double(salary).hashCode()
+ 13 * hireDay.hashCode();
}

public String toString()
{
return getClass().getName()
+ "[name=" + name
+ ",salary=" + salary
+ ",hireDay=" + hireDay
+ "]";
}

private String name;
private double salary;
private Date hireDay;
}

class Manager extends Employee
{
public Manager(String n, double s, int year, int month, int day)
{
super(n, s, year, month, day);
bonus = 0;
}

public double getSalary()
{
double baseSalary = super.getSalary();
return baseSalary + bonus;
}

public void setBonus(double b)
{
bonus = b;
}

public boolean equals(Object otherObject)
{
if (!super.equals(otherObject)) return false;
Manager other = (Manager) otherObject;
// super.equals checked that this and other belong to the same class

return bonus == other.bonus;
}

public int hashCode()
{
return super.hashCode()
+ 17 * new Double(bonus).hashCode();
}

public String toString()
{
return super.toString()
+ "[bonus=" + bonus
+ "]";
}

private double bonus;
}

좋은 웹페이지 즐겨찾기