코드 그라데이션

Day25. 추상화 (3) final, equals() 본문

Java/Mega

Day25. 추상화 (3) final, equals()

완벽한 장면 2023. 4. 17. 20:33

final

- 값을 변경할 수 없는 것.

 

ex.)

public [final] int max = 20;

max = 30; (에러)

 

변수/ 메소드/ 클래스 에 사용가능하다

 

변수 final - 값을 변경 할 수 없다.

메소드  final - 오버라이딩 일때 사용 불가능

클래스 final  - 상속 불가

 

사용 예시

final class T1 {
	
}

class T2 extends T1 { // T1 이 final이라 상속 불가능
	
}

class T3 {
	final void abc() {
		
	}
	
}

class T4 extends T3 {
//	void abc() // final => 오버라이딩 불가능
}

public class FinalTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		final int a = 20;
//		a = 30; // final 변수라 에러가
	}

}

 

 

 

equals

> 비교를 위해 사용하는 키워드

 

이러한 경우가 있다고 해보면,

Class A{

}

 

메인 메서드에

A a = new A();

A a1 = new A();

 

이 때,

a == a1 // false => 객체가 다르니까

a.equals(a1) // false => 무조건 객체 같아야합니다.  

 

그런데 만약에,

A a2 = new A();

A a3 = a2;

이런 경우가 있다고 해보면,

a2 == a3 // true ----> 같은 주소를 바라보고 있게 된다.

 

이러한 경우임.

 

예제

public class EqualsTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		C c = new C();
		C c1 = new C();
		C c2 = c1;
		if(c == c1) {
			System.out.println("c == c1"); // 출력 안 됨
		}
		if(c.equals(c1)) {
			System.out.println("c.equals(c1)"); // 출력 안 됨.
		}
		if(c1 == c2) {
			System.out.println("c1 == c2");
		}
		
		
		String str = "하이";
		
		if(str == "하이") {
			System.out.println("str == 하이");
		}
		if(str.equals("하이")) {
			System.out.println("str.equals(\"하이\")");
		}
	}

}
728x90
Comments