[코틀린기초] 3. 자료형 변환

코틀린은 기본형을 사용하지 않고 참조형만 사용
서로 다른 자료형은 변환 과정을 거친 후 비교

val a : Int = 1
val b : Double = a // 자료형 불일치 에러
val c : Int = 1.1 //자료형 불일치 에러

변환 메서드

변환 메서드를 이용하면 자료형을 변환할 수 있다

ex) val b : Double = a.toDouble()

toByte, toLong , toShort, toFloat, toInt, toDouble, toChar 이 있음

자료형 비교

이중등호 vs 삼중등호

이중등호 == 는 값만 비교

삼중등호 === 는 값과 참조 주소를 비교

※ java에서 == 는 값과 참조 주소를 비교한다. 값 비교는 equals

같은 값을 가지더라도 nullable에따라 참조 주소값이 달라짐 (=== 가 false)

ex) val a : Int = 128

val b : Int? = a
val c : Int? = a // b, c는 같은 값 이더라도 참조형이므로 참조 주소가 다름
val d : Int? = b // 참조형 b가 참조하는 주소를 d가 참조하도록 함

println(b == c) // true
println(b === c) // false

println(b === d) // true

※코틀린에서는 참조형으로 선언한 변수의 값이 -128~127범위에 있다면 캐시ㅔ 그 값을 저장

스마트 캐스트

구체적으로 명시되지 않은 자료형을 자동 변환

값에 따라 자료형을 결정

Number형(Int, Long..)은 숫자를 저장하기 위한 특수한 자료형으로 스마트 캐스트됨

ex)
var test : Number: 12.2 //Float로 스마트 캐스트
test = 12 // Int로 스마트 캐스트
test = 120L //Long으로 스마트 캐스트

자료형의 검사

is 키워드를 사용하여 자료형을 검사할 수 있다

val num = 256
if(num is Int){

}
else{

}

묵시적 변환

자료형이 정해지지 않은 경우

모든 클래스의 뿌리, 최상위 클래스 (Int나 String 모두 Any형의 자식클래스)

Any는 언제든 필요한 자료형으로 스마트 캐스트

ex)
var a: Any = 1 //Int로 초기화
a = 20L //Int -> Long 스마트 캐스트

a.javaclass 는 변수의 자바 기본형, 위의 결과는 long

Any형을 인자로 받는 함수를 만들 수 있음

ex) fun func(x : Any){}