자료형 변환
코틀린(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 가 있는지 궁금하면?? 클릭 -> [코틀린] 오류코드 정리 :: 리뎁
자료형 과 변수가 궁금 하다면 ? 아래를 클릭 -> [코틀린] 자료형과 변수 & 엘비스 연산자 :: 리뎁
'Programming > Kotlin' 카테고리의 다른 글
[코틀린] 자료형검사 :: 리뎁 (0) | 2019.12.01 |
---|---|
[코틀린] 스마트캐스트 :: 리뎁 (0) | 2019.12.01 |
[코틀린] 자료형과 변수 & 엘비스 연산자 :: 리뎁 (0) | 2019.11.16 |
[코틀린] Module, Package, File :: 리뎁 (0) | 2019.11.10 |
[코틀린] 개발환경 구축하기 :: 리뎁 (0) | 2019.10.31 |