package test;
public class Person {
int name;
int age;
Person(int n, int i) {
name = n;
age = i;
}
public static void main(String[] args) {
Person tom = new Person(1, 25);
Person john = new Person(2, 27);
System.out.println(tom);
System.out.println(john);
}
}
输出值test.Person@15db9742
test.Person@6d06d69c
不应该是1,25.
2,27吗
println会去调用String.valueOf(Person),
String.valueOf的源码
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
Person的toString是Object中的toString
源码如下
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
所以最终是test.Person@15db9742
想要你自己的结果,Person中重载toString方法,按照你想要的格式return输出就行了。
除非你重载toString,否则输出的是类名+Hash
package test;
public class Person {
int name;
int age;
Person(int n, int i) {
name = n;
age = i;
}
public static void main(String[] args) {
Person tom = new Person(1, 25);
Person john = new Person(2, 27);
System.out.println(tom.name +" " + tom.age);
System.out.println(john.name +" " + john.age);
}
}
要重载toSting()函数,然后按照下面的方式打印
Person(int n, int i) {
name = n;
age = i;
public String toString() {
return this.name + "," + this.age;
}
System.out.println(tom.toString());
System.out.println(john.toSting());
}