Java- String对象和用户定义对象之间的区别

时间:2012-03-19 14:10:05

标签: java object

这是一个简单的java程序。它包含一个“学生”类,我们正在制作它的两个对象stud,stud1。类似地,我也创建了一个String对象“a”,其值为“Hello”。

class Student{

  int age;

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

  public int getAge(){
    return age;
  }
}


class Hello{

  public static void main(String args[]){

    Student stud= new Student();
    Student stud1= new Student();
    stud.setAge(15);
    int i=stud.getAge();
    String a=new String("Hello");
    System.out.println(stud);
    System.out.println(stud1);
    System.out.println(a);
  }

}

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

7 个答案:

答案 0 :(得分:4)

这一行

System.out.println(stud);

相当于 1

System.out.println(stud.toString());

String overrides Object.toString方法以来,您在打印字符串时获得的内容比一堆字符和数字更有意义。

您也可以让用户定义的类也这样做。在Student课程中,它看起来像这样:

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
    }
}

这是ideone.com demo,用于代码的运行Student会覆盖toString

进一步阅读:

1)除非stud等于null

答案 1 :(得分:4)

当你调用System.out.println(x)时,String输出是传递给它的对象的.toString()

当然,.toString()的{​​{1}}是字符串本身,所以您期望String

如果您的类没有定义"Hello"方法(并且没有),则使用为其父级定义的.toString()(是.toString()类),基于类型/类和对象的Object的值。

答案 2 :(得分:1)

当您将System.out.println()作为对象时,它将调用该对象的toString()方法,以便能够打印出来。 Object有一个默认的toString()方法,这就是你的Student对象调用的内容,因为你没有覆盖toString()方法。但是,字符串必须以明显的方式定义toString(),因此它打印出对象的自定义字符串表示;即,字符串的值。

答案 3 :(得分:1)

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

要打印有意义的值,请将其覆盖 -

@Override
public String toString() {
    return "Age = " + age;
}

答案 4 :(得分:0)

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

答案 5 :(得分:0)

你的学生班只是不要覆盖每个java对象继承的toString()方法:

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Object.html#toString()

答案 6 :(得分:0)

简单地说,println(Object obj)类中有PrintStream方法(System.out是PrintStream的一个实例),在其实现中有obj.toString()。您可以覆盖任何对象的toString(),以通过调用System.out.println(Object obj)格式化字符串产量。