JAVA中重写toString

本文介绍如何通过重写toString()方法来定制Java对象的显示形式,并提供了详细的代码示例。此外,还介绍了TreeSet集合的使用及自定义排序方法。

当需要将一个对象输出到显示器时,通常要调用他的toString()方法,将对象的内容转换为字符串.java中的所有类默认都有一个toString()方法

默认情况下 System.out.println(对象名)或者System.out.println(对象名.toString())输出的是此对象的类名和此对象对应内存的首地址 如果想自定义输出信息必须重写toString()方法

注意事项

1.必须被声明为public

2.返回类型为String

3.方法的名称必须为toString,且无参数

4.方法体中不要使用输出方法System.out.println()

import java.util.*;
public class TreeSetTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SortedSet<Item> parts=new TreeSet<Item>();
		parts.add(new Item("Toaster", 1234));
		parts.add(new Item("Widget", 4562));
		parts.add(new Item("Modem", 9912));
		System.out.println(parts);
		SortedSet<Item> sortByDescription=new TreeSet<Item>(new 
				Comparator<Item>()
				{
					public int compare(Item a, Item b)
					{
						String descrA=a.getDescription();
						String descrB=b.getDescription();
						return descrA.compareTo(descrB);
					}
			
				});
		sortByDescription.addAll(parts);
		System.out.println(sortByDescription);

	}

}
class Item implements Comparable<Item>
{
	public Item(String aDescription, int aPartNumber)
	{
		description=aDescription;
		partNumber=aPartNumber;
	}
	public String getDescription()
	{
		return description;
	}
	public boolean equals(Object otherObject)
	{
		if(this==otherObject)
			return true;
		if(otherObject==null)
		{
			return false;
		}
		if (getClass()!=otherObject.getClass())
		{
			return false;
		}
		Item other=(Item)otherObject;
		return description.equals(other.description)&&
				partNumber==other.partNumber;
	}
	public int hashCode()
	{
		return 13*description.hashCode()+17*partNumber;
	}
	public int compareTo(Item other)
	{
		return partNumber-other.partNumber;
	}
	private String description;
	private int partNumber;
}
输出为:

[Item@8c9e3a56, Item@d780c206, Item@39c021ba]
[Item@39c021ba, Item@8c9e3a56, Item@d780c206]
Item重载toString()方法后:

import java.util.*;
public class TreeSetTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SortedSet<Item> parts=new TreeSet<Item>();
		parts.add(new Item("Toaster", 1234));
		parts.add(new Item("Widget", 4562));
		parts.add(new Item("Modem", 9912));
		System.out.println(parts);
		SortedSet<Item> sortByDescription=new TreeSet<Item>(new 
				Comparator<Item>()
				{
					public int compare(Item a, Item b)
					{
						String descrA=a.getDescription();
						String descrB=b.getDescription();
						return descrA.compareTo(descrB);
					}
			
				});
		sortByDescription.addAll(parts);
		System.out.println(sortByDescription);

	}

}
class Item implements Comparable<Item>
{
	public Item(String aDescription, int aPartNumber)
	{
		description=aDescription;
		partNumber=aPartNumber;
	}
	public String getDescription()
	{
		return description;
	}
	public String toString()
	{
		return "[description="+description
				+",partNumber="+partNumber+"]";
	}
	public boolean equals(Object otherObject)
	{
		if(this==otherObject)
			return true;
		if(otherObject==null)
		{
			return false;
		}
		if (getClass()!=otherObject.getClass())
		{
			return false;
		}
		Item other=(Item)otherObject;
		return description.equals(other.description)&&
				partNumber==other.partNumber;
	}
	public int hashCode()
	{
		return 13*description.hashCode()+17*partNumber;
	}
	public int compareTo(Item other)
	{
		return partNumber-other.partNumber;
	}
	private String description;
	private int partNumber;
}


输出为:

[[description=Toaster,partNumber=1234], [description=Widget,partNumber=4562], [description=Modem,partNumber=9912]]
[[description=Modem,partNumber=9912], [description=Toaster,partNumber=1234], [description=Widget,partNumber=4562]]

### 回答1: 好的,以下是Java重写toString方法的示例: ```java public class MyClass { private String name; private int age; public MyClass(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "MyClass{" + "name='" + name + '\'' + ", age=" + age + '}'; } } ``` 在这个示例中,我们创建了一个名为`MyClass`的类,并在构造函数中初始化了`name`和`age`实例变量。我们使用`@Override`注解来重写`toString`方法,该方法将返回一个包含`name`和`age`字段值的字符串表示形式。注意,我们在返回的字符串中使用了字符串连接运算符`+`和转义字符`\`来生成一个格式化的字符串。 ### 回答2: 在Java中,每个类都会隐式继承自Object类,它包含了一些通用的方法,其中包括toString()方法。这个方法的作用是将对象转换成字符串表示形式。当我们没有在类中显式地重写toString()方法时,调用对象的toString()方法会返回一个由类名,'@'符号和对象的哈希码组成的字符串。 为了让toString()方法返回符合我们的需求的字符串表示形式,我们可以在类中重写该方法。通过重写toString()方法,我们可以自定义返回的字符串,以使其包含我们认为重要的属性或状态信息。 重写toString()方法的步骤如下: 1. 在类中加入toString()方法的定义。 2. 在该方法内部,构造一个包含类的属性或状态信息的字符串。可以使用字符串拼接操作符("+")将不同的属性和信息连接在一起。 3. 返回构造的字符串。 例如,假设我们有一个名为Student的类,它包含学生的姓名和年龄信息。我们可以重写该类的toString()方法,以返回一个包含学生姓名和年龄的字符串表示形式。代码示例如下: public class Student { private String name; private int age; // 构造函数和其他方法 @Override public String toString() { return "Student: [name=" + name + ", age=" + age + "]"; } } 通过调用Student对象的toString()方法,可以得到一个类似于"Student: [name=Tom, age=20]"的字符串。这个字符串提供了学生的姓名和年龄信息,更符合我们的需求。 总之,重写toString()方法可以让我们得到符合需求的对象字符串表示形式,以便更好地理解和调试代码。 ### 回答3: 在Java中,每个类都继承自Object类,而Object类中有一个名为toString()的方法。这个方法用于返回一个表示该对象的字符串。 然而,Object类中默认的toString()方法返回的是对象的哈希码值的字符串表示。这对于实际开发中的调试和打印输出来说往往不够直观和有用。 因此,在自定义类中,我们可以重写toString()方法,来返回我们所需的信息。 要重写toString()方法,我们需要按照以下步骤进行: 1. 在类中添加一个public修饰的toString()方法。 2. 在该方法中,以字符串的形式返回我们所需的信息。 例如,假设我们有一个名为Person的类,该类具有name和age两个属性,我们希望在调用toString()方法时返回"姓名:XXX,年龄:XXX"的字符串表示。 我们可以这样重写toString()方法: ``` public class Person { private String name; private int age; // 构造方法和其他方法省略 @Override public String toString() { return "姓名:" + name + ",年龄:" + age; } } ``` 这样,当我们通过调用Person对象的toString()方法时,就会返回符合我们要求的字符串表示。 通过重写toString()方法,我们可以在输出对象时获得更清晰和有用的信息,方便调试和理解代码。而且,许多Java类库中的类,如String、Integer等,已经重写toString()方法,使得输出它们时获得更有意义的信息。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值