Java-字符串对象和用户定义对象之间的差异

Java-字符串对象和用户定义对象之间的差异,java,object,Java,Object,这是一个简单的java程序。它包含一个类“Student”,我们正在对它的两个对象stud1进行研究。类似地,我还创建了一个字符串对象“a”,其值为“Hello” 正如我们所知,当我们创建一个类对象时,它只保存该对象的一个引用值。这就是为什么当我尝试打印stud和stud1时,我得到两个引用值。但是由于“a”是类字符串的对象,我们应该期望一个引用值,而不是值“Hello”。为什么会发生这种情况 这条线 System.out.println(stud); 等于 由于String方法,在打印字符串

这是一个简单的java程序。它包含一个类“Student”,我们正在对它的两个对象stud1进行研究。类似地,我还创建了一个字符串对象“a”,其值为“Hello”

正如我们所知,当我们创建一个类对象时,它只保存该对象的一个引用值。这就是为什么当我尝试打印stud和stud1时,我得到两个引用值。但是由于“a”是类字符串的对象,我们应该期望一个引用值,而不是值“Hello”。为什么会发生这种情况

这条线

System.out.println(stud);
等于

由于
String
方法,在打印字符串时,您可以获得比一堆字符和数字更有意义的内容

您可以让您的用户定义类也这样做。在你的
学生
课堂上,它看起来是这样的:

class Student{

    int age;

    public void setAge(int age){
        this.age=age;
    }

    public int getAge(){
        return age;
    }

    @Override
    public String toString() {              // Called for instance when
        return "Student with age " + age;   // the student should be printed
    }
}
下面是一个运行代码的示例,其中
Student
覆盖
toString

进一步阅读:

  • 文档(不重写它的类的回退方法)
  • 文件

1) 除非在将System.out.println()交给对象时stud等于null,否则它将调用该对象的toString()方法以便能够打印出某些内容。对象有一个默认的toString()方法,这就是为学生对象调用的方法,因为您没有重写toString()方法。然而,字符串以明显的方式定义了toString(),因此它打印出对象的自定义字符串表示形式;也就是字符串的值。

当调用
System.out.println(Object)
时,调用该对象的
toString()
方法。由于没有为
Student
实现一个,因此将调用
对象.toString()
,该对象将打印参考值

要打印有意义的值,请像这样覆盖它--


调用的
toString()
方法并打印字符串“Hello”。

您的学生类只是不重写每个java对象继承的toString()方法:


()

调用
System.out.println(x)
时,字符串输出是传递给它的对象的
.toString()

当然,
字符串的
.toString()
就是字符串本身,所以您希望
“Hello”


如果您的类没有定义
.toString()
方法(而且它没有),那么将使用为其父类定义的
.toString()
(是
对象
类),它根据对象的类型/类和
hashCode()
打印一个值。

简单地说,就是
println(Object obj)
PrintStream类(System.out是PrintStream的一个实例)中的
方法,在其实现中有
obj.toString()
。您可以重写任何对象的
toString()
,以格式化调用
System.out.println(object obj)
生成的字符串。请注意,“Hello”已经是一个字符串,因此新字符串()是不必要的。也许您可以这样实现:return“My age is:”+age;事实上,不是
stud.toString()
,而是
straint.valueOf(stud)
,对于非空对象调用
stud.toString()
,恐怕都不会编译。您需要返回一个字符串。
System.out.println(stud.toString());
class Student{

    int age;

    public void setAge(int age){
        this.age=age;
    }

    public int getAge(){
        return age;
    }

    @Override
    public String toString() {              // Called for instance when
        return "Student with age " + age;   // the student should be printed
    }
}
@Override
public String toString() {
    return "Age = " + age;
}