【问题标题】:Why we can assign a string to a simple Java Object [duplicate]为什么我们可以将字符串分配给一个简单的 Java 对象 [重复]
【发布时间】:2016-08-28 16:13:57
【问题描述】:

我想知道为什么这是合法的:

Object mystring = "hello";
System.out.println(mystring);

这打印出hello。但是为什么Object 被当作字符串对待呢?

【问题讨论】:

  • 如果我们查看Java docs for String,我们可以看到public final class String extends Object。这意味着 Object 是 String 的父类。与Animal类和Dog extends Animal类基本相同;在这种情况下你可以做Animal pet = new Dog();
  • Object mystring 是引用而不是对象。 Java 中不能有 Object 变量。

标签: java


【解决方案1】:

因为String IS-A Object,所以引用类型可以是任何超类型。

例如,您还可以将 mystring 分配给 CharSequence 类型。

PrintStream(您的System.out 静态字段)的println 方法有一个重载,可以将String 作为参数并正确打印。

但在这种情况下,PrintStream#println(Object) 中的代码实际上将打印String.valueOf(x),其中x 是您给定的参数。

【讨论】:

    【解决方案2】:

    它调用它的 toString() 方法。在 String 类中实现的那个。方法在运行时绑定。

    【讨论】:

    • Nit:它不只是简单地调用Object.toString():它首先检查null,并在这种情况下打印"null";否则,它会调用toString()。我不记得它是否真的调用Objects.toString(obj),但它在逻辑上是一样的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 2019-02-25
    • 2010-10-14
    • 1970-01-01
    相关资源
    最近更新 更多