코틀린은 기본형을 사용하지 않고 참조형만 사용
서로 다른 자료형은 변환 과정을 거친 후 비교
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){}