편집 기록

편집 기록
  • 프로필 알 수 없는 사용자님의 편집
    날짜2016.04.18

    hashcode에 대해서


    독학과 인강으로 공부하고 있는 초보입니다.

    hashcode를 처음 공부하다보니 헷깔리는 부분이 있는데 마땅히 질문할 곳이 없어 이렇게 글을 남기게 되었습니다. 제가 궁금한 소스는 아래와 같습니다. (대충넘어가기보다는 한 줄 한 줄 주석을 달며 이해하고 넘어가는 게 많아 주석이 많습니다. 양해부탁드리고, 혹시나 틀린 내용을 발견하시어 충고해주시면 감사하겠습니다.)

    package ObjectExs;
    
    public class EqualsEx1 {
    
        public static void main(String[] args) {
            int aa = 100;
            int bb = 100;
    
            String str1 = new String("하이 자바"); // String str1 = "하이 자바" 같다.
            String str2 = "하이 자바";
    
            System.out.println(str1.hashCode()); // 출력값: 422206472
            System.out.println(str2.hashCode()); // 출력값: 422206472
    
    
            if (aa==bb){// 출력값 : aa와 bb는 서로 같다
                System.out.println("aa와 bb는 서로 같다");
            }else {
                System.out.println("aa와 bb는 서로 다르다");
            }
            System.out.println("/////////////str1 = str2;/////////////");
            if (str1==str2){//출력값 : str1와 str2는 서로 다르다
                System.out.println("str1과 str2는 서로 같다");
            }else {
                System.out.println("str1와 str2는 서로 다르다");
            }
    
    
            // == 비교연산자는 기본자료형을 비교하는 경우에는 값을 비교한다.
            // 참조형(Reference Type)의 비교는 주소값을 비교한다.
            // equals (반환값 :  true or false)
    
    
            System.out.println("/////////////str1.equals(str2)/////////////");
            //오버라이딩함.
            if (str1.equals(str2)){//출력값 : str1와 str2는 서로 같다
                System.out.println("str1과 str2는 서로 같다");
            }else {
                System.out.println("str1와 str2는 서로 다르다");
            }
    
            Value va1 = new Value(10);
            Value va2 = new Value(10);
    
            System.out.println(va1.hashCode()); // 출력값: 366712642
            System.out.println(va2.hashCode()); // 출력값: 1829164700 둘의 주소값이 다름
            //hashCode()는 object상속받음, 원칙적으로 주소값이 다른게 원칙
    
            //va1 = va2;
            //오버라이딩 안함.
            if (va1.equals(va2)){//출력값 : va1와 va2는 서로 다르다 
                //-> but 66~72줄 equals 오버라이딩으로 인하여 같아진다. 
                System.out.println("va1과 va2는 서로 같다");
            }else {
                System.out.println("va1와 va2는 서로 다르다");
            }
            // 오버라이딩 유무에 따라 비교하는 것이 다르다.
            // ->Equals 메소드가 Object 클래스에 있는 경우는 주소값을 비교한다
            // ->String객체의 Equals메소드는 오버라이딩 된 메소드여서 내용을 비교한다.
    
        }
    } //end of EqualsEx1
    
    class Value{
        int a;
            //오버라이딩//오버라이딩을 하여야 내용비교가능
            public boolean equals(Object obj){ //오버라이딩
            if(obj !=null && obj instanceof Value){ // obj가 Value타입인지 확인하는 것
                return a == ((Value)obj).a;
            } else {
                return false;
            }
        }
        public Value(int a){
            this.a = a;
        }
    } // end of Value
    

    Q.1 str1과 str2 str1.equals(str2)은 출력값이 str1와 str2는 서로 같다라고 나오는 반면 va1.equals(va2)은 출력값이 va1와 va2는 서로 다르다(오버라이딩안했을 시)라고 나옵니다. 왜 다른지 모르겠습니다. 강좌에서 string은 오버라이딩했다고 하는데 이 소스만 봤을 때는 오버라이딩을 했는지 잘 모르겠습니다.

    Q.2 소스 맨 아래 쪽인 boolean을 반환타입으로 갖는 equals메소드의 오버라이딩에 대해 질문이 있습니다. 여기서 매개변수가 object obj인지를 모르겠습니다. 왜 object인지요? 그리고 if문의 조건으로 obj !=null && obj instanceof Value을 사용했는지 모르겠습니다.

    강좌를 보고 여기에 질문을 드려 죄송하게 생각하고 있습니다. 거기엔 질문할 수 있는 곳이 없고 구글,네이버에 검색해봐도 제 수준에서는 도저히 이해하기 어려운 부분이라 질문드렸습니다.

  • 프로필 허대영(소프트웨어융합대학)님의 편집
    날짜2016.04.18

    hashcode에 대해서


    독학과 인강으로 공부하고 있는 초보입니다.

    hashcode를 처음 공부하다보니 헷깔리는 부분이 있는데 마땅히 질문할 곳이 없어 이렇게 글을 남기게 되었습니다. 제가 궁금한 소스는 아래와 같습니다. (대충넘어가기보다는 한 줄 한 줄 주석을 달며 이해하고 넘어가는 게 많아 주석이 많습니다. 양해부탁드리고, 혹시나 틀린 내용을 발견하시어 충고해주시면 감사하겠습니다.)

    package ObjectExs;
    
    public class EqualsEx1 {
    
        public static void main(String[] args) {
            int aa = 100;
            int bb = 100;
    
            String str1 = new String("하이 자바"); // String str1 = "하이 자바" 같다.
            String str2 = "하이 자바";
    
            System.out.println(str1.hashCode()); // 출력값: 422206472
            System.out.println(str2.hashCode()); // 출력값: 422206472
    
    
            if (aa==bb){// 출력값 : aa와 bb는 서로 같다
                System.out.println("aa와 bb는 서로 같다");
            }else {
                System.out.println("aa와 bb는 서로 다르다");
            }
            System.out.println("/////////////str1 = str2;/////////////");
            if (str1==str2){//출력값 : str1와 str2는 서로 다르다
                System.out.println("str1과 str2는 서로 같다");
            }else {
                System.out.println("str1와 str2는 서로 다르다");
            }
    
            // 출력결과 : .str1와 str2는 서로 같다
            // == 비교연산자는 기본자료형을 비교하는 경우에는 값을 비교한다.
            // 참조형(Reference Type)의 비교는 주소값을 비교한다.
            // equals (반환값 :  true or false)
            // 즉, ==은 주소 비교, equal은 값 비교
    
            System.out.println("/////////////str1.equals(str2)/////////////");
            //오버라이딩함.
            if (str1.equals(str2)){//출력값 : str1와 str2는 서로 같다
                System.out.println("str1과 str2는 서로 같다");
            }else {
                System.out.println("str1와 str2는 서로 다르다");
            }
    
            Value va1 = new Value(10);
            Value va2 = new Value(10);
    
            System.out.println(va1.hashCode()); // 출력값: 366712642
            System.out.println(va2.hashCode()); // 출력값: 1829164700 둘의 주소값이 다름
            //hashCode()는 object상속받음, 원칙적으로 주소값이 다른게 원칙
    
            //va1 = va2;
            //오버라이딩 안함.
            if (va1.equals(va2)){//출력값 : va1와 va2는 서로 다르다 
                //-> but 66~72줄 equals 오버라이딩으로 인하여 같아진다. 
                System.out.println("va1과 va2는 서로 같다");
            }else {
                System.out.println("va1와 va2는 서로 다르다");
            }
            // 오버라이딩 유무에 따라 비교하는 것이 다르다.
            // ->Equals 메소드가 Object 클래스에 있는 경우는 주소값을 비교한다
            // ->String객체의 Equals메소드는 오버라이딩 된 메소드여서 내용을 비교한다.
    
        }
    } //end of EqualsEx1
    
    class Value{
        int a;
            //오버라이딩//오버라이딩을 하여야 내용비교가능
            public boolean equals(Object obj){ //오버라이딩
            if(obj !=null && obj instanceof Value){ // obj가 Value타입인지 확인하는 것
                return a == ((Value)obj).a;
            } else {
                return false;
            }
        }
        public Value(int a){
            this.a = a;
        }
    } // end of Value
    

    Q.1 str1과 str2 str1.equals(str2)은 출력값이 str1와 str2는 서로 같다라고 나오는 반면 va1.equals(va2)은 출력값이 va1와 va2는 서로 다르다(오버라이딩안했을 시)라고 나옵니다. 왜 다른지 모르겠습니다. 강좌에서 string은 오버라이딩했다고 하는데 이 소스만 봤을 때는 오버라이딩을 했는지 잘 모르겠습니다.

    Q.2 소스 맨 아래 쪽인 boolean을 반환타입으로 갖는 equals메소드의 오버라이딩에 대해 질문이 있습니다. 여기서 매개변수가 object obj인지를 모르겠습니다. 왜 object인지요? 그리고 if문의 조건으로 obj !=null && obj instanceof Value을 사용했는지 모르겠습니다.

    강좌를 보고 여기에 질문을 드려 죄송하게 생각하고 있습니다. 거기엔 질문할 수 있는 곳이 없고 구글,네이버에 검색해봐도 제 수준에서는 도저히 이해하기 어려운 부분이라 질문드렸습니다.

  • 프로필 알 수 없는 사용자님의 편집
    날짜2016.04.18

    hashcode에 대해서


    독학과 인강으로 공부하고 있는 초보입니다.

    hashcode를 처음 공부하다보니 헷깔리는 부분이 있는데 마땅히 질문할 곳이 없어 이렇게 글을 남기게 되었습니다. 제가 궁금한 소스는 아래와 같습니다. (대충넘어가기보다는 한 줄 한 줄 주석을 달며 이해하고 넘어가는 게 많아 주석이 많습니다. 양해부탁드리고, 혹시나 틀린 내용을 발견하시어 충고해주시면 감사하겠습니다.)

    package ObjectExs;

    public class EqualsEx1 {

    public static void main(String[] args) {
        int aa = 100;
        int bb = 100;
    
        String str1 = new String("하이 자바");
        String str2 = "하이 자바";
    
        System.out.println(str1.hashCode()); // 출력값: 422206472
        System.out.println(str2.hashCode()); // 출력값: 422206472
    
    
        if (aa==bb){// 출력값 : aa와 bb는 서로 같다
            System.out.println("aa와 bb는 서로 같다");
        }else {
            System.out.println("aa와 bb는 서로 다르다");
        }
        System.out.println("/////////////str1 = str2;/////////////");
        if (str1==str2){//출력값 : str1와 str2는 서로 다르다
            System.out.println("str1과 str2는 서로 같다");
        }else {
            System.out.println("str1와 str2는 서로 다르다");
        }
    
        // 출력결과 : .str1와 str2는 서로 같다
        // == 비교연산자는 기본자료형을 비교하는 경우에는 값을 비교한다.
        // 참조형(Reference Type)의 비교는 주소값을 비교한다.
        // equals (반환값 :  true or false)
    
    
        System.out.println("/////////////str1.equals(str2)/////////////");
        //오버라이딩함.
        if (str1.equals(str2)){//출력값 : str1와 str2는 서로 같다
            System.out.println("str1과 str2는 서로 같다");
        }else {
            System.out.println("str1와 str2는 서로 다르다");
        }
    
        Value va1 = new Value(10);
        Value va2 = new Value(10);
    
        System.out.println(va1.hashCode()); // 출력값: 366712642
        System.out.println(va2.hashCode()); // 출력값: 1829164700 둘의 주소값이 다름
        //hashCode()는 object상속받음, 원칙적으로 주소값이 다른게 원칙
    
        //va1 = va2;
        //오버라이딩 안함.
        if (va1.equals(va2)){//출력값 : va1와 va2는 서로 다르다 
            //-> but 66~72줄 equals 오버라이딩으로 인하여 같아진다. 
            System.out.println("va1과 va2는 서로 같다");
        }else {
            System.out.println("va1와 va2는 서로 다르다");
        }
        // 오버라이딩 유무에 따라 비교하는 것이 다르다.
        // ->Equals 메소드가 Object 클래스에 있는 경우는 주소값을 비교한다
        // ->String객체의 Equals메소드는 오버라이딩 된 메소드여서 내용을 비교한다.
    
    }
    

    } //end of EqualsEx1 뒤의 소스가 짤려서 이미지첨부하였습니다..

    여기다 글을 올리려는데 뒤의 소스가 짤려서 뒷부분은 이미지첨부하였습니다

    Q.1 str1과 str2 str1.equals(str2)은 출력값이 str1와 str2는 서로 같다라고 나오는 반면 va1.equals(va2)은 출력값이 va1와 va2는 서로 다르다(오버라이딩안했을 시)라고 나옵니다. 왜 다른지 모르겠습니다. 강좌에서 string은 오버라이딩했다고 하는데 이 소스만 봤을 때는 오버라이딩을 했는지 잘 모르겠습니다.

    Q.2 소스 맨 아래 쪽인 boolean을 반환타입으로 갖는 equals메소드의 오버라이딩에 대해 질문이 있습니다. 여기서 매개변수가 object obj인지를 모르겠습니다. 왜 object인지요? 그리고 if문의 조건으로 obj !=null && obj instanceof Value을 사용했는지 모르겠습니다.

    강좌를 보고 여기에 질문을 드려 죄송하게 생각하고 있습니다. 거기엔 질문할 수 있는 곳이 없고 구글,네이버에 검색해봐도 제 수준에서는 도저히 이해하기 어려운 부분이라 질문드렸습니다. 긴 소스첨부하여 더욱 죄송합니다(__)