[JAVA] ArrayList에서 list.contains 메소드 호출 시, false가 나오는 경우

     

    contains 메소드 실행시, 프로그램 내부적으로는 .equals() 동등비교가 진행된다.

     

     

    .equals()를 오버라이딩 하는 구문은 다음과 같다.

     

     

        public boolean equals(Object obj) {
            return (this == obj);
        }

    .equals()를 호출하면 Object 클래스에 있는 equals()가 호출 된다.

    다음과 같은 코드로 기술된다. 

    .equals() 메소드는 기본적으로 주소값 동등비교를 진행된다.

     

    하지만 우리가 원하는 것은 주소값 동등비교가 아닌 문자열 동등 비교이기 때문에, 

    따라서 Music 클래스에 equlas메소드를 오버라이딩을 해야한다.

    	
        @Override
        public boolean equals(Object obj){
    		
    		Music other = (Music)obj;
    		
    		if(this.title.equals(other.title) && this.artist.equals(other.artist)) {
    			return true;
    		} else {
    			 return false;
    		}
    		
    	}
    	

     

    다시 실행을 해보면, 올바른 결과값이 나오는 것을 확인할 수 있다.

     

    728x90

    댓글