쉽게 배우는 자바 프로그래밍(우종정) 프로그래밍 문제 풀이 4장 - 5번

2019. 12. 4. 18:11쉽게 배우는 자바 프로그래밍

  class Line {
    private int length;

      public Line(int length) {
        this.length = length;
    }

    public boolean isSameLine (Line line1) {
          if (length == line1.length)
              return true;
          else
              return false;
    }
}
    public class LineTest {
    public static void main(String[] args) {
        Line a = new Line(1);
        Line b = new Line(1);

        System.out.println(a.isSameLine(b));
        System.out.println(a == b);
    }
}

4번 문제에서 == 와 equals를 구글링해봤는 데

5번 문제가 비슷했다!

 

==는 각 객체를 비교한 것이서서 false가 나온 것 같다.

그치 두 객체가 완전히 같다고 할 순 없으니..

 

근데 equals를 써도 false가 나왔다

왜인지.. 검색해보니 Object가 가진 equals는 단순히 참조변수만을 비교하는데, 오버라이딩을 하지 않아 Object의 equals가 실행되어 false가 나온것이고, true가 나오려면 오버라이딩을 해야한다

오버라이딩.. 아직 상세하게는 안 배웠지만... 구글링과 교재 뒷부분의 힘으로!

  class Line {
    private int length;

      public Line(int length) {
        this.length = length;
    }

    public boolean isSameLine (Line line1) {
          if (length == line1.length)
              return true;
          else
              return false;
    }
      @Override
      public boolean equals(Object obj){
          Line t = (Line)obj;
          boolean ret = t.length == this.length;
          return ret;
      }
}
    public class LineTest {
    public static void main(String[] args) {
        Line a = new Line(1);
        Line b = new Line(1);

        System.out.println(a.isSameLine(b));
        System.out.println(a.equals(b));
        System.out.println(a == b);
    }
}

이러면 true, true, false 순으로 나온다.