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