2012-03-19 3 views
2

이것은 간단한 자바 프로그램입니다. 여기에는 "Student"클래스가 포함되어 있으며 두 개의 오브젝트를 stud1로 만듭니다. 비슷하게 나는 값이 "Hello"인 String 객체 "a"를 만들었습니다.Java- 문자열 오브젝트와 사용자 정의 오브젝트 간의 차이점

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

} 

우리는 클래스 개체를 만들 때 우리가 알다시피, 그냥 내가 있기 때문에 두 개의 기준 values.But 무엇입니까 스터드와 stud1를 인쇄하려고 할 때 그 물건도의 이유 "는이"에 대한 참조 값을 보유 String 클래스의 객체 값 "Hello"대신에 참조 값을 기대해야합니다. 왜 그런가?

+3

"Hello"는 이미 String이므로 새로운 String()은 필요하지 않습니다. –

답변

4

이 줄

System.out.println(stud); 

Stringoverrides는 문자와 숫자 문자열을 인쇄하는 무리보다 더 의미있는 무언가를 얻을 Object.toString 방법 때문에

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

1 동일합니다.

사용자 정의 클래스도이 작업을 수행 할 수 있습니다. 당신의 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) U null이 아닌 스터드가 null이됩니다.

  • +0

    아마도 다음과 같이 구현하면됩니다. return "My age is :"+ age; –

    +0

    실제로,'stud.toString()'이 아니고'Straing.valueOf (stud)'는 null 객체가 아니라'stud.toString()'을 호출합니다. – Betlista

    1

    System.out.println() 객체를 건네 주면, 무언가를 인쇄 할 수 있도록 (듯이) 객체의 toString() 메소드를 호출합니다. Object는 기본 toString() 메서드를 가지고 있으며 toString() 메서드를 재정의하지 않았으므로 Student 객체에 대해 호출됩니다. 그러나 문자열에는 명백한 방법으로 정의 된 toString()이 있으므로 객체의 해당 사용자 정의 문자열 표현이 인쇄됩니다. 즉, 문자열의 값.

    1

    System.out.println(Object)으로 전화하면 해당 개체의 toString() 메서드가 호출됩니다. Student에 대해 구현 된 것이 없기 때문에 참조 값을 인쇄하는 Object.toString()이 호출됩니다.

    지금처럼 오버라이드 (override), 의미있는 값을 인쇄하려면 -

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

    컴파일도하지 않을 것입니다. 문자열을 반환해야합니다. – aioobe

    +0

    오류 .. thanks @aioobe. – Kal

    0

    a의 toString() 메소드를 호출하고 문자열 "안녕하세요"를 출력한다.

    4

    는, 문자열 출력이 객체의 .toString()입니다 그것을 지나쳤습니다.

    물론 String.toString()은 문자열 자체이므로 "Hello"을 기대할 수 있습니다.

    클래스는 .toString() 방법을 정의하지 않습니다 (그리고하지 않음), 부모에 정의 된 .toString() 형/클래스에 따라 값과 hashCode()의를 출력 사용,합니다 (Object 클래스) 경우 그 물체.

    +1

    +1은 hashCode를 언급합니다. – JohnnyK

    0

    PrintStream 클래스 내에는 println(Object obj) 메서드가 있고 (System.out은 PrintStream의 인스턴스 임), 구현 내부에는 obj.toString()이 있습니다. 모든 객체의 toString()을 재정 의하여 문자열 수율을 형식화하여 System.out.println(Object obj)을 호출 할 수 있습니다.

    관련 문제