在Java程序中混淆输出

时间:2014-05-06 02:54:39

标签: java console output tostring println

我是Java编程的新手,我正在关注Udemy的指南。我正在通过类处理数据操作,这是一个简单的名称格式化程序。将预定义的字符串(名称的一部分)插入到类中以格式化它们。

该程序使用两个类:Name.java和NameTest.java(驱动程序文件)

Name.java

package javaProject;

    public class Name { 
        private String first;
        private String middle;
        private String last;

        public Name(String f, String m, String l){
            first = f;
            middle = m;
            last = l;
        }

        public Name(String f, String l){
            first = f;
            middle = "";
            last = l;
        }

        public Name(String f){
            first = f;
            middle = "";
            last = "";
        }

        public Name(){
            first = "";
            middle = "";
            last = "";
        }
        ///
        public String displayName(){    
            return first + " " + middle + " " + last; 
        }


    public static void main(String[] args){

    }

}

NameTest.java

package javaProject;

public class NameTest{
    public static void main(String[] args){
        Name myName = new Name("Damon", "myMiddleName", "myLastName");
        System.out.println("My Name: " + myName.toString());
    }

}

输出

My Name: javaProject.Name@35afe17b

知道为什么我在指定输出应该是字符串后得到这个?我不确定如何解决这个问题,因为我再次对Java很陌生。

3 个答案:

答案 0 :(得分:4)

重命名您的方法,displayName不会覆盖 Object.toString()这就是您想要的;

// public String displayName(){ // <--- toString()
public String toString() {    
  return first + " " + middle + " " + last; 
}

虽然有第二种选择(但注意toString()的优点),那就是

public static void main(String[] args){
    Name myName = new Name("Damon", "myMiddleName", "myLastName");
    System.out.println("My Name: " + myName.displayName()); // <-- or this,
    // System.out.println("My Name: " + myName); // <-- but the advantage of performing
                                                 // <-- an override on toString() is
                                                 // <-- that this implicit `toString()`
                                                 // <-- will work.
}

答案 1 :(得分:2)

您必须覆盖toString()

类似

public String toString()
{
return first+" "+ middle+" "+last;

}

答案 2 :(得分:1)

您的类名缺少toString()方法,并从Object继承默认值,用于输出类名和内存地址。

替换:

public String displayName(){    
    return first + " " + middle + " " + last; 
}

使用:

public String toString() {    
    return first + " " + middle + " " + last; 
}