【问题标题】:Getting Garbage Output Java [duplicate]获取垃圾输出Java [重复]
【发布时间】:2014-02-18 01:09:24
【问题描述】:

我正在尝试在 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()方法。你看到的是toString的默认输出,一个对象的类型和hashcode。
  • 那不是垃圾,那是对象的身份哈希码
  • Here's 谷歌搜索你。

标签: java


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    如果你在 Java 中打印 Object,它会打印带有十六进制值的类名。

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        来自 Object.toString() 文档:

        返回对象的字符串表示形式。一般来说, toString 方法返回一个“以文本形式表示”的字符串 目的。结果应该是简洁但信息丰富的表示 这对一个人来说很容易阅读。建议所有 子类覆盖此方法。

        Object 类的 toString 方法返回一个字符串,该字符串由 对象是其实例的类的名称,at 符号 字符“@”和哈希的无符号十六进制表示 对象的代码。换句话说,这个方法返回一个字符串等于 值:

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

        因此,您必须通过这样做来提供自己的 toString 方法:

        @Override
        

        public void toString(){ return myString; }

        【讨论】: