求大神帮帮忙,搞不懂了

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());
}