본문 바로가기
프로그래밍/Kotlin

동일성, 동등성 ( ==, ===, equal() 차이)

by Youngs_ 2021. 6. 22.

동일성 : 두개의 오브젝트가 주소값까지 똑같다

동등성 : 두개의 오브젝트가 주소값이 다르더라도 같은 값을 가지고있음

 

    val a = String(StringBuilder("hello"))
    val b = String(StringBuilder("hello"))

    println(a == b) // true, 동등성, 값만 똑같고 저장된 주소는 다름
    println(a === b) // false, 동일성, 주소까지 똑같음
    println(a.equals(b)) // true, 동등성, 값만 똑같고 저장된 주소는 다름

위 코드에서 StringBuilder는 각 주소값을 다르게 하기위해 사용함

 

String 문자끼리 더할때는 "a" + "b"와같은 식으로 더하지만 이렇게 하면 메모리가 낭비 될수도 있다.

StringBuilder는 동적으로 메모리가 할당되어 메모리를 더욱 효율적으로 사용할 수 있다.

문자열끼리 더할때 아래 코드처럼 사용한다.

var c : StringBuilder = StringBuilder() // String Builder 선언, c에는 아무것도 들어있지않다.
    c.append("Hello") // 변수 c에 append 메서드를 이용해 Hello를 추가 -> 현재 c = "Hello"
    c.append("_World") // 변수 c에 append 메서드를 이용해 _World를 추가 -> 현재 c = "Hello_World"
    println(c)

 

코틀린은 자바에는 없는 ===연산자를 지원한다. 참조 비교를 위해서 === 연산자를 사용하면 된다. 즉, 자바의 주소 값 비교인 ==와 코틀린의 ===가 동일한 역할을 한다.

댓글