java공부

java/자바 equals 사용하여 동등성 비교

이쟤키 2021. 8. 15. 13:45
반응형

equals는 동등성을 비교한다.

즉,

String[] s = new String[1];
s[0] = "hi";
System.out.println(s.equals("hi"); // true

이런식으로 나올 것이다.

하지만 true라고 주소값이 같은 것은 아니다.

대신 HashCode는 같다.

		String s = "hi";
		String s2 = "hi";
		String s3 = new String("hi");
		
		System.out.println(s == s2); // true
		System.out.println(s == s3); // false
		System.out.println(s.equals(s3)); // true
		
        // hash값 동일
		System.out.println(s.hashCode() == s3.hashCode()); // true

 

객체 배열을 비교하면

public void test1() {

	// Set을 이용해서 Hi객체를 출력
	Set<Hi> hi = new HashSet<>();
        
    // Hi객체에 ("hi", 10)을 입력
	hi.add(new Hi("hi", 10));
		
    // Iterator를 이용해서 출력
	Iterator<Hi> iter = hi.iterator();
	while(iter.hasNext()) {
        	
        // hi를 String s에 받음
		String s = iter.next().getHello();
			
        // equals를 통해 비교
        System.out.println(s.equals("hi")); // true
        
	}

}

이런식으로 나올 것이다.

 

equals를 이용한 프로그램 종료 상황을 만들자면

public void test1() {
	Scanner sc = new Scanner(System.in);
	String[] s = new String[1];		
		
	while(true) {
			
		System.out.print("insert hi : ");
		s[0] = sc.next();
       		 // exit를 입력하면 종료하도록
        	if(s[0].equals("exit")) {
			System.out.println("종료");
			return;
		}
			
	}

이런식으로 사용 할 수 있다.

 

만약 if문에서 equals대신에 ==을 이용한 비교를 한다면

영원히 반복문을 빠져나오지 못 할 것이다.