Java 实例方法返回的是十六进制而不是字符串
我正在练习如何编写类和创建对象之间的“是”关系。在下面的代码中,第一类“人”定义了一个人,然后在第二类“MarryDemo”中,我看到某人是否结婚,配偶是谁,地址等等。他们甚至很快就离婚了。代码从一开始就基于Jan Skansholm Java的示例 问题是,我希望MarryDemo中的主要方法的结果是“Kris Humphries”,“43新泽西喷气机街”,“空”,但不是我得到的配偶姓名Java 实例方法返回的是十六进制而不是字符串,java,Java,我正在练习如何编写类和创建对象之间的“是”关系。在下面的代码中,第一类“人”定义了一个人,然后在第二类“MarryDemo”中,我看到某人是否结婚,配偶是谁,地址等等。他们甚至很快就离婚了。代码从一开始就基于Jan Skansholm Java的示例 问题是,我希望MarryDemo中的主要方法的结果是“Kris Humphries”,“43新泽西喷气机街”,“空”,但不是我得到的配偶姓名Person@558ee9d6,配偶的地址和离婚后的配偶与我预期的一样 Person@558ee9d6表示什
Person@558ee9d6
,配偶的地址和离婚后的配偶与我预期的一样
Person@558ee9d6
表示什么?这就是“克里斯·汉弗莱斯”这个名字所指的物体的位置吗?为什么Person@558ee9d6
是否显示而不是名称
//defines a person
public class Person {
//instance variables
private String name, address;
private Person spouse;
//constructor
public Person(string n) {
name = n;
}
//instance methods
public String getName() {
return name;
}
public void marry(Person p) {
spouse = p;
p.spouse = this;
}
public Person isMarriedTo() {
return spouse;
}
... //more methods for returning address, divorcing, etc.
}
您需要实现一个
toString()
方法(默认值不适用)。大多数IDE都会为您生成一个
什么是Person@558ee9d6意味着什么
对象的类名和标识。有关代码,请参见Object.toString()
这就是“克里斯·汉弗莱斯”这个名字所指的物体的位置吗
与名字无关。您正在调用的是Person.toString()
为什么Person@558ee9d6是否显示而不是名称
//defines a person
public class Person {
//instance variables
private String name, address;
private Person spouse;
//constructor
public Person(string n) {
name = n;
}
//instance methods
public String getName() {
return name;
}
public void marry(Person p) {
spouse = p;
p.spouse = this;
}
public Person isMarriedTo() {
return spouse;
}
... //more methods for returning address, divorcing, etc.
}
你说你想把名字印在哪里
如果我将
string
替换为string
,并使用IDE生成一个toString,默认值为
@Override
public String toString() {
return "Person{" +
"address='" + address + '\'' +
", name='" + name + '\'' +
", spouse=" + spouse +
'}';
}
这显然是不合适的,因为这将永远存在。你可以把它改成
@Override
public String toString() {
return "Person{" +
"address='" + address + '\'' +
", name='" + name + '\'' +
", spouse=" + spouse != null ? spouse.getName() : " {none}" +
'}';
}
您正在尝试将对象转换为字符串。这(自动)使用
Object
类中可用的toString()
方法。结果以您描述的形式显示
如果您想将其转换为您自己的自定义字符串。您应该自己实现toString()
方法。例如:
public String toString() {
return name;
}
您正在打印
Person
对象。您可以覆盖toString()
方法。e、 g
public String toString(){
return this.getName();
}
或者
System.out.println(p1.marriedTo().getName());
p、 s.
isMarriedTo
是一个不好的方法名称,因为is
通常用于返回布尔值的方法,getdomen
将是一个更好的名称您需要重写toString方法。默认行为是:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
因此,您看到的是附加了哈希代码的十六进制表示形式的类名。java怎么知道它应该打印name属性
您可以将其放在person方法中以显示名称:
@Override
public String toString() {
return this.getName();
}
您的System.out.println(p1.marriedTo());似乎很少见,您正在尝试打印一个对象,它应该是System.out.println(p1.marriedTo().getName());我想,。在我的代码片段的上下文中,实现/覆盖toString()方法还是只编写System.out.println(p1.marriedTo().getName())更好?好的。我假设默认的IDE toString可以,但在本例中有一个循环引用。