Java - 在运行时引用对象名称的问题

时间:2015-09-02 04:08:38

标签: java

我试图在小型Java控制台程序中尝试在运行时引用对象的名称,但我无法做到。我的控制台一直在返回" VirtualFriend @ 17dfafd1"而不是我在参数中传递的VirtualFriend对象的实际名称。如何将其转换为显示对象名称而不是其哈希码的实际String?以下是参考代码:

opacity

4 个答案:

答案 0 :(得分:2)

每当我们希望任何类以字符串形式表示自己时,就会调用toString()函数。它在Object类中定义。所以它将在每个班级。此toString()函数返回类的名称及其哈希码。

如果您想改变它的行为,只需覆盖此功能。

@Override
public String toString(){
    return myName;
}

答案 1 :(得分:1)

您需要在print语句中调用other.getName()。名为name的变量在Java中没有特殊含义;当它看到一个与字符串连接的对象时,它会尝试在该对象上调用toString()方法。如果该对象没有定义toString(),那么(通过object对象的继承)它会调用"default" toString()方法,该方法返回您观察到的字符串;类名@哈希码。

答案 2 :(得分:1)

当您使用+运算符来连接字符串时,如果另一个是字符串,Java将允许您将任何对象用作操作数之一。在这种情况下,对该对象进行隐含的toString()调用。所以你的println实际上是这样的:

    System.out.println("Hi there " + other.toString() + ". It's nice "
            + "to meet you. My name is " + myName.toString() + ".");

所有对象都有toString(),但默认情况下,结果看起来像Class@xxxxxxxx,其中x是十六进制数字。如果你想要一个看起来合理的toString(),你必须在班上自己覆盖它:

@Override
public String toString() {
    return <whatever String expression you want>;
}

Java定义的许多类已经有toString()个覆盖。 String类型本身已覆盖toString(),它只返回字符串(因此myName.toString()myName相同)。但是你自己的类不会有内置的覆盖。 (此外,数组没有覆盖toString(),您需要使用Arrays.toString(arr)从数组中生成一个字符串。)

答案 3 :(得分:1)

- 每当我们打印任何java对象时,默认情况下会打印类似@ xxxx ...

的内容

- 但是如果你想用它的关联值打印对象,那么你需要覆盖该类中的toString()方法。