달력

62024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

'삼중등호'에 해당되는 글 1건

  1. 2019.11.17 [코틀린] 자료형 비교/변환 - 이중등호-삼중등호 :: 리뎁

자료형 변환

코틀린(Kotlin) 만의 얘기는 아니겠지만 

코틀린에서는 자료형이 다르면 변환하여 대입해 주어야 한다. 

예를 들어 자바의 경우 

int a = 1;
double b = a; 

라고 하면 int 형인 a 를 double형인 b 에 대입하면 

자동으로 a 를 double 형으로 변환해 준다. 더 큰? 자료형으로 변환되는 것.

즉 b 의 값은 1.0 으로 자동 형 변환.

하지만 코틀린 에서는 Type mismatch 오류가 발생한다. 

아래의 예를 보자 

(그리고 자꾸 까먹는데.....코틀린에서 변수선언시 변수 타입의 첫글자는 문자로 하자 ㅠㅠ)

// 코틀린은 에러를 발생
val a1: Int = 1
val b1: Double = a1 // Int 형 변수인데 왜 Double에 넣음? 이건 에러!
val c1: Int = 1.0 // Int 형 변수인데 왜 소수점 넣음? 이건 에러!

그래서 뒤에 변환 메서드를 붙인다 

// 매우정상
val a1: Int = 1
val b1: Double = a1.toDouble()
val c1: Int = 1

 

이중등호 & 삼중등호

이중등호(==) 와 삼중등호(===) 는 값만 같은가 주소값 까지 같은가의 차이 이다.

아래를 보자 

// (1) 이중등호 , 삼중등호
val a3: Int = 128
val b3: Int = 128

println(a3 == b3) // true
println(a3 === b3) // true

// (2) 이중등호 , 삼중등호
println("삼중등호 널값 체크")
val a4: Int = 128
val b4: Int? = 128

println(a4 == b4) // true

println(a4 === b4) // false

"// (1)" 의 경우 이중부호, 삼중부호 모두 true 값이 나온다. 

"// (2)" 의 경우 이중부호 true, 삼중부호 false 값이 나온다. 

이유는 (1)의 경우 기본형으로 변환되어 스택에 128을 저장하게 된다. 

하지만 (2)의 경우 Null 값을 허용하는 참조형이므로 참조 주소가 저장되어 있기때문...

그런데 한가지 주의 할 점은 

만약 수치가 -128 ~127 사이에 있다면 모두 true가 나온다 

아래와 같이 ... 
val a4: Int = 123
val b4: Int? = 123

println(a4 == b4) // true
println(a4 === b4) // true 

이는 -128 ~ 127 까지의 값은 캐시에 값을 저장하고 변수는 캐시의 주소값을 가리키기 때문에 그렇다.

 

 


코틀린에 어떤 Error 가 있는지 궁금하면?? 클릭 -> [코틀린] 오류코드 정리 :: 리뎁

자료형 과 변수가 궁금 하다면 ? 아래를 클릭 -> [코틀린] 자료형과 변수 & 엘비스 연산자 :: 리뎁

 

 

Posted by redev
|