获取垃圾输出Java

我正在尝试用Java实现一个构造函数,我不知道我做错了什么,但我不断得到垃圾输出。

这是我试图将值赋给的变量:

private static Employee employee; 

这就是我试图分配它的方式:

 employee = new Employee(empType, empFName, empLName, empBDate, empGender, empHireDate, empReleaseDate, empBaseSalary); 

这是类和构造函数:

 public class Employee { private String Type; private String FName; private String LName; private Date BDate; private String Gender; private Date HireDate; private Date ReleaseDate; private double BaseSalary; public Employee(String type, String fname, String lname, String bdate, String gender, String hire, String release, double salary){ this.Type = type; this.FName = fname.toUpperCase(); this.LName = lname.toUpperCase(); this.BDate = new Date(bdate); this.Gender = gender; this.HireDate = new Date(hire); if (release == "null"){ this.ReleaseDate = null; } else if(release != "null"){ this.ReleaseDate = new Date(release); } this.BaseSalary = salary; } } 

当我尝试打印时,只是为了测试它,这就是我打印它的方式:

 System.out.println(employee); 

这就是我每次都得到的:

 Employee@4c264dd8 

有人能告诉我我做错了什么吗?

除非您通过实现toString()告诉它该做什么,否则Java不知道您希望如何打印对象。 如果不这样做,它将默认为Object.toString()以获取对象的字符串表示forms。 Object.toString()返回

 getClass().getName() + '@' + Integer.toHexString(hashCode()) 

这解释了你所看到的输出。

如果在Java中打印Object,它将使用hex值打印类名。

如果你想要自己的东西,你必须覆盖toString()。

 public void toString() { //print here this.Type +":"+ this.FName for fields you want. } 

每个Java对象都带有toString()方法。 您将必须覆盖它以获得所需的输出。我相信正在打印对象(内存地址)的hashCode!

来自Object.toString()文档:

返回对象的字符串表示forms。 通常,toString方法返回一个“文本表示”此对象的字符串。 结果应该是简洁但信息丰富的表示,便于人们阅读。 建议所有子类都覆盖此方法。

类Object的toString方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@”以及对象的哈希码的无符号hex表示组成。 换句话说,此方法返回一个等于值的字符串:

 getClass().getName() + '@' + Integer.toHexString(hashCode()) 

因此,您必须通过以下方式提供自己的toString方法:

 @Override 

public void toString(){return myString; }