Java中的ToString方法

当我们创建任何用户定义类的对象并打印该对象时,我们将获得该对象的十六进制地址。见下文

    Book B = new Book ("Include Help");
    System.out.println(B);

输出结果

@2a139a55

在这里,当我们打印Book类的B对象时,我们将获得Object的十六进制代码而不是Object的值。

但是,当我们对Java预定义类(例如String)执行相同的操作时。它不会打印地址,但会打印该对象的值。

    String  S= new String ("Include Help");
    System.out.println(S);

输出结果

Include Help

那么,在用户定义的类的情况下情况如何?看看后台发生了什么有趣吗?

这是因为Java编译器会toString()在每个类中搜索将对象转换为字符串的方法。如果使用此方法,则在类中找不到它,它将打印对象的HexaCode地址。但是在预定义的Java类(如String)中,预定义了toString方法。

如果我们想要在用户定义的类中实现相同的功能,则必须在类中显式声明toString方法,这在示例中已完成。

让我们来看一个例子,

在类中未定义toString方法的类

package logicProgramming;
//代表一本书的类 
class Book
{
	private String Name;
	private String Code;
	private String Author;
	public Book(String Name,String Code,String Author)
	{
		this.Name=Name;
		this.Code=Code;
		this.Author=Author;
	}
	
}
public class ExImportant {

	public static void main(String[] args) {
	Book B=new Book("Let Us C","HT301","Harsh Tomar");	
	
	//如果我们使用System.out.println(B),它将打印 
	//对象B的十六进制代码地址
	//但是如果我们要打印对象的值 
	//我们必须在用户定义的类中使用toString方法	
	//让我们了解......-
	System.out.println(B);
	
	//查看输出,它将打印B的地址	
	
	}
}

输出结果

[email protected]

注意: logicProgramming是程序包的名称,Book是类的名称

现在,让我们修改此代码以获取Object的值,以便执行此操作,我们必须toString()在类中定义一个方法

package logicProgramming;
//代表这本书的类
class Book
{
	private String Name;
	private String Code;
	private String Author;
	public Book2(String Name,String Code,String Author)
	{
		this.Name=Name;
		this.Code=Code;
		this.Author=Author;
	}
	
	//toString方法 
	public String toString()
	{return ("Name :"+this.Name+"\nCode :"+this.Code+"\nAuthor :"+this.Author);}  
}
public class ExImportant2 {

	public static void main(String[] args) {
	Book B=new Book("Let Us C","HT301","Harsh Tomar");	
	//如果我们使用System.out.println(B) 
	//它将打印对象B的十六进制代码地址
	//但是如果我们要打印对象的值 
	//我们必须在用户定义的类中使用toString方法	
	//让我们了解......-
	System.out.println(B);
	
	//查看将打印Obeject B信息的输出	
	
	}

}

输出结果

Name :Let Us C
Code :HT301
Author :Harsh Tomar