【问题标题】:What's the default value for an 'object' in java? [duplicate]java中“对象”的默认值是什么? [复制]
【发布时间】:2014-01-01 12:39:10
【问题描述】:

出乎意料,我遇到了这个:

public class demo {
    void multiply(){
       System.out.println("HELLO WORLD!")
       }
}

public static void main(String args[]){
        demo e=new demo();
        demo e1=new demo();
        System.out.println(e);
        System.out.println(e1);
    }
}

我执行代码时得到的奇怪输出是:

demo@6e1408

demo@e53108

或者

demo@1888759

demo@6e1408

有人可以向我解释发生了什么吗? 我得到的值,这是一个对象的默认值,还是我遗漏了什么?

【问题讨论】:

标签: java object default-value


【解决方案1】:

你必须在你正在打印的类中 override toString() 方法。

现在它正在打印Object 类toString() 方法的默认实现。

From Object class Source code

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

Object 类的 toString 方法返回一个字符串,该字符串由对象作为其实例的类的名称、at 符号字符“@”和对象哈希码的无符号十六进制表示形式组成。换句话说,此方法返回一个等于以下值的字符串: getClass().getName() + '@' + Integer.toHexString(hashCode())

Returns:
a string representation of the object.


    public String  toString() {
         return getClass().getName() + "@" + Integer.toHexString(hashCode());
     }

因此,在您的 Demo 类 Ovveride toString() 方法中获得所需的 O/P。

    public class Demo{

    ----

       @Override
       public String toString() {
             //return something 
       }    
}

【讨论】:

    【解决方案2】:

    术语“对象的默认值”并不正确。对象不会默认,引用会默认为null,如Data Types 上的文档中所述。

    您看到的程序输出是toString() 的默认实现返回的String。当您调用PrintStream.println(Object)(System.out.println(demo) 正在执行的操作)时,PrimeStream 需要将传递的对象(在本例中为您的Demo 对象)转换为String,它只需调用其@987654325 即可@方法。

    如果您没有在您的班级中覆盖 toString(),那么您将获得默认行为。

    【讨论】:

      【解决方案3】:

      这是对象的默认toString() 方法的结果,该方法打印出类名和哈希码。实际上,您可以通过覆盖要打印的对象类中的toString() 方法来更改此设置。但是,您必须在对象上调用toString(),而不是打印对象本身。例如:

      public class demo{
      
          void multiply(){
              System.out.println("HELLO WORLD!")
          }
      
          public String toString() {
              return "This is the class, demo.";
          }
      
      
          public static void main(String args[]){
              demo e=new demo();
              demo e1=new demo();
              System.out.println(e.toString());
              System.out.println(e1.toString());
          }
      }
      

      P.S: 对象未初始化时,对象的“默认值”为null。但是,对象中的默认值由构造函数中的任何内容定义。我建议您更多地研究对象和类。

      【讨论】:

        【解决方案4】:

        实际上默认情况下对象的toString 方法返回someObjectClassname@hashcodenumber。要打印所需的输出,您必须覆盖 toString 方法

        【讨论】:

          【解决方案5】:

          您看到的值是内存中的对象地址,值不同表明它不是同一个对象。如果您想更改输出的内容,请覆盖 .toString() 方法。

          【讨论】:

            【解决方案6】:

            这是您看到的 toString() 返回值

            默认对象的实现

            public String toString() {
                return getClass().getName() + "@" + Integer.toHexString(hashCode());
            }
            

            Object 没有默认值,但其成员变量有默认值 based on its type

            【讨论】:

              猜你喜欢
              • 2016-08-25
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-04-16
              • 2019-05-11
              • 2016-06-07
              • 1970-01-01
              • 2011-02-26
              相关资源
              最近更新 更多