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