【问题标题】:Confusing Output in Java ProgramJava程序中的混淆输出
【发布时间】:2014-05-06 02:54:38
【问题描述】:

我是 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 新手。

【问题讨论】:

标签: java console output tostring println


【解决方案1】:

重命名您的方法,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.
}

【讨论】:

    【解决方案2】:

    你必须覆盖toString()

    类似

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

    【讨论】:

      【解决方案3】:

      您的类名缺少toString() 方法,并从Object 继承默认方法,该方法会打印类名和内存地址。

      替换:

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

      与:

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

      【讨论】:

      • 哇,多么奇怪的巧合。本教程将格式化方法命名为“toString”,而我将我的命名为“displayName”。 'toString' 恰好与完全不同的东西共享一个方法名称。我将“myName.toString()”切换为“myName.displayName()”,效果很好!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 2017-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多