zerons
171
2019-03-15 19:14:43 작성 2019-03-15 19:24:57 수정됨
6
581

자바코딩 질문하나만 드려도댈까요


여기서 왜 출력결과가 저렇게 나오는지를 도무지 모르겠습니다.

Product클래스의 toString이 실행된걸로 보이는데 왜 저게실행된건지 알고싶습니다!

0
0
  • 댓글 6

  • 사는게힘듭니다
    1k
    2019-03-15 19:19:47

    Product라는 생성자을 가진 클라스를

    3. String 형태로 객체화해서 객체의 참조변수를 p에 저장했으니

    3 String으로 뜨는거죠

    0
  • vernum
    935
    2019-03-15 19:34:09

    println 메소드를 직접 확인해보시면 바로 이해 되실겁니다.

    0
  • zerons
    171
    2019-03-15 19:41:00

    죄송한데 어디서 확인해보면 될까요 ㅜㅜ

    0
  • # 우선 답부터 이야기 드리면 아래와 같습니다.


    1. System.out.println(객체)

        : 위 코드를 실행하시면, 아래 메소드를 호출합니다.

    public void println(Object x) {
        String s = String.valueOf(x);
        synchronized (this) {
            print(s);
            newLine();
        }
    }


    2. String.valueOf(x) 코드는 내부적으로 아래 메소드를 호출합니다.

    
    public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }


    3. java.lang.Object 클래스의 toString() 메소드를 호출하는데 , 본인이 작성한 클래스는 toString() 메소드를 재정의(Overriding) 했기 때문에 해당 메소드를 호출해서 위와 같은 결과가 나오는 거에요.

    위 코드를 이해하시려면, 상속(extends), 재정의(Overriding), String 클래스를 살펴보시면 됩니다. 기초에 충실하자!
    0
  • 하두
    9k
    2019-03-15 20:05:30 작성 2019-03-15 20:07:46 수정됨

    모든 객체는 toString() 메서드를 가지고 있다. 

    그래서 System.out.println(객체명); 하면, 
       클래스명@해쉬코드가 출력이 된다, 
       - 그러나 클래스 내에 public String toString() {  return "xxx";  }  하면 
         "클래스명@해쉬코드"  이것이 출력 되지 않고 return 의  xxx 가 출력 된다.
    * print(), println()  둘다 해당.  

    ♥♥무조건ㆍ toString  메소드 호출한다♥♥

    0
  • junghaklee
    142
    2019-03-15 20:15:16 작성 2019-03-15 20:23:49 수정됨

    많은분들한테 도움이 될것 같아서 적습니다.

    https://docs.oracle.com/javase/7/docs/api/java/lang/System.html 보면

    System.out => java.io.PrintStream


    따라서 java.io.PrintStream 소스 코드를 보면

    http://developer.classpath.org/doc/java/io/PrintStream-source.html

    line 531

    public void println (Object obj)
     532:   {
     533:     print(obj == null ? "null" : obj.toString(), true);
     534:   }

     여기서 obj 는 Product 입니다. 

    두번째 Product 클래스 line 16에따르면

    public String toSgtring() {

       return "qweqwe"

    }


    print(obj == null ? "null" : obj.toString(), true);

    obj 값이 없으면 null 이라 찍고, 아니면 obj.toString() 호출값을 찍어라 입니다.

    예제에서 obj는 값이 있음으로 obj.toString() 는 qweqwe 가 찍히게 되는겁니다.


    한번 main(String [] arg)에서

    Product p = null;

    System.out.println(p)

    해서 null 찍히나 테스트 해보세요 :)

    0
  • 로그인을 하시면 댓글을 등록할 수 있습니다.