`
lifeiniao526
  • 浏览: 37731 次
  • 性别: Icon_minigender_1
  • 来自: 济南
文章分类
社区版块
存档分类
最新评论

关于toString方法

 
阅读更多
toString方法用于表示对象值的字符串.
绝大多数的toString方法遵循这样的格式:类的名字,随后是一对方括号括起来的域值.下面是Employee类中的toString方法的实现(后面附上完整程序):

public 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(),那么子类仅调用super.toString()就可以了,例如,下面是Manager类中的toString方法:

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

调用toString:只要对象与一个字符串通过操作符"+"连接起来,java编译就会自动地调用toString方法,以便获得这个对象字符串描述.例如:

Point p=new Point(10,20);
String message="The current position is"+p;

//automatically invokes p.toString()

强烈建议为自己编写的每一个类增加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;
}

分享到:
评论

相关推荐

    js中toString方法3个作用.docx

    js 中 toString 方法的 3 个作用 js 中的 toString 方法是 Object.prototype 上的一个方法,每个对象都可以调用该方法。该方法的主要作用是将对象转换为字符串形式,以便于对象的表示和处理。在 js 中,toString ...

    重写toString和equals方法

    Java 对象的toString和equals方法重写 在 Java 中,每个对象都继承自 Object 类,而 Object 类中定义了两个重要的方法:toString() 和 equals()。这两个方法都是非常重要的,它们分别用于对象的字符串表示和对象...

    C#示例:装箱、拆箱、自定义数据类型转换、ToString方法重载、类方法扩展

    在C#编程中,装箱、拆箱、自定义数据类型转换、ToString方法重载以及类方法扩展是几个核心概念,对于理解和优化程序性能至关重要。本文将深入探讨这些主题,并通过具体的实例来阐述它们的应用。 1. 装箱与拆箱 装箱...

    ToString()和Convert.ToString()的用法区别

    在一般情况下,ToString()和Convert.ToString()方法都可以通用,但是在处理可能为null的对象时,Convert.ToString()方法更为安全。因为ToString()方法在对象为null时将抛出异常,而Convert.ToString()方法则返回一个...

    java常用包。Date类,tostring方法视频

    java内常用包,date类,toString的使用方法

    最好的java对象ToString处理方案,ToString基类

    `ToString`方法是Java中一个常用的功能,用于将对象的属性以字符串的形式展示出来,这对于调试和日志记录非常有用。在给定的`标题`中提到的"最好的java对象ToString处理方案,ToString基类"指的是一个优化的`...

    toString完美解释

    在 Java 中,toString() 方法是一个非常重要的方法,它是 Object 类中的一个方法,所有继承自 Object 的类都会继承这个方法。toString() 方法的主要作用是将对象转换为字符串形式,以便于输出或显示。 toString() ...

    为 java文件 书写 ToString方法

    1.自动为指定包下面的所有JAVA 文件书写toString方法代码。 2.自动为指定Class模板类书写toString方法代码。 3.使用该类前最好做备份,编码格式一定要提前设置。

    JavaScript Object toString 初始

    通过阅读《https://will-2011.iteye.com/blog/1006184》这篇博客,你可以获取更多关于`toString`方法的详细信息,包括它在不同上下文下的行为、可能遇到的问题,以及如何有效利用`toString`进行调试。同时,`Object_...

    C#ToString()方法一些特殊用法

    C#ToString()方法一些特殊用法

    浅析JAVA中toString方法的作用

    在Java编程语言中,`toString()`方法是一个非常重要的功能,尤其对于对象的表示和输出。该方法源自`Object`类,由于所有的Java类都隐式或显式地继承自`Object`,因此所有类的对象都可以调用`toString()`方法。这个...

    toString()方法1

    在Java编程语言中,`toString()`方法扮演着重要的角色,它是`Object`类的一个实例方法。由于Java中所有的类都隐式地继承自`Object`类,所以每个类的实例都可以调用`toString()`方法。默认情况下,`Object`类的`...

    C#t中有关tostring函数的格式

    C# 中的 ToString 函数是一种常用的格式化字符串方法,它可以将各种类型的数据转换为字符串。ToString 函数可以接受一个可选的格式化代码字符串作为参数,该参数可以控制输出字符串的格式。 数值格式化: * C:...

    Java Object toString方法原理解析

    Java Object toString方法原理解析 Java Object 的 toString 方法是每个 Java 开发者都应该了解的基础知识。本文将通过示例代码详细介绍 Java Object toString 方法的原理解析,帮助开发者更好地理解和应用此方法。...

    java中的tostring方法的具体用法

    Java 中的 toString 方法的具体用法 Java 中的 toString 方法是一种非常重要的方法,用于将对象转换为字符串形式,以便于打印或显示对象的信息。在 Java 中,每个对象都有一个 toString 方法,该方法返回对象的字符...

    JavaScript Object toString 初始补充

    结合提供的文件名`Object_toString_toString(radix).html`,我们可以推测文章可能包括一个关于使用`toString`方法特别是其`radix`参数的实例分析。这可能是一个详细的代码示例,解释如何使用`radix`来格式化数字字符...

    vb.net Tostring()

    在VB.NET中,`ToString()`方法是一个非常重要的成员,它被广泛用于各种数据类型的对象,以便将它们转换为字符串形式。这个方法具有高度的灵活性,可以根据传入的参数和格式化代码来定制输出的字符串样式。以下是一些...

    C# ToString格式大全

    下面将详细介绍每种格式的使用方法和示例。 一、货币格式(C 或 c) 货币格式使用大写或小写的 C 来表示,例如:`Console.Write("{0:C}", 2.5);` 输出结果为:$2.50。货币格式通常用于表示货币价值,例如人民币、...

    在C#的类或结构中重写ToString方法的用法简介

    因此,C# 中的每个对象都会获得 ToString 方法,此方法返回该对象的字符串表示形式。例如,所有 int 类型的变量都有一个 ToString 方法,此方法可让这些变量将其内容作为字符串返回: int x = 42; string strx = x....

    ToString()格式设置大全

    在编程中,ToString()方法是用于将对象转换为字符串的通用方法。在本篇文章中,我们将详细介绍ToString()方法的格式设置大全,包括数字、日期时间、货币等多种格式的设置。 数字格式设置 在ToString()方法中,可以...

Global site tag (gtag.js) - Google Analytics