Kotlin には、Java のプリミティブ型に相当する int や boolean といった型は存在せず、すべてがオブジェクトです。
例えば、32 ビット整数を扱いたい場合は、一貫して Int と記述すればよく、Java のように int と Integer を使い分ける必要はありません(内部で必要に応じて Java の int や Integer 相当のものとして扱われます)。
- 数値型
Byte… 8ビット整数Short… 16ビット整数Int… 32ビット整数Long… 64ビット整数Float… 32ビット浮動小数点数Double… 64ビット浮動小数点数
- 文字、文字列
Char… 文字String… 文字列
- 論理型
Boolean
- 列挙型
enum classで定義
- 特殊型
Any… Java のObjectに相当。すべてのクラスのスーパークラスです(正確には Null 許容型のスーパークラスはAnyではなくAny?)。Unit… Java のvoidに相当。意味を持たない値を表現します。AnyはUnitのスーパークラスでもあります。Nothing… インスタンスが存在しないことを表現します。ある関数の戻り値がNothingと定義されている場合、その関数からreturnされることはないことを示しています(内部で無限ループしているとか、必ず例外を投げるとか)。Nothingはすべてのクラスのサブクラスであるとされています。プラットフォーム型… Java で定義された型で、@NonNullや@Nullableといったアノテートがされていないものです。Kotlin の言語仕様上はString!のような!付きの型として表現され、Null 非許容型 (String) と Null 許容型 (String?) のどちらとして扱うかは実装者に委ねられています。Kotlin コード上で明示的にString!と書くことはできません。
下記は Kotlin で定義した変数が、Java のどの型に対応しているかを示しています。
// Null 非許容型
val i: Int = 1 //=> int
val d: Double = 0.1 //=> double
val f: Float = 0.1 //=> float
val o: Byte = 1 //=> byte
val b: Boolean = true //=> boolean
val c: Char = 'X' //=> char
val s: String = "ABC" //=> String
// Null 許容型
val i_na: Int? = null //=> Integer
val d_na: Double? = null //=> Double
val f_na: Float? = null //=> Float
val o_na: Byte? = null //=> Byte
val b_na: Boolean? = null //=> Boolean
val c_na: Char? = null //=> Character
val s_na: String? = null //=> String
// コレクション系
val list: List<Int> = listOf(1, 2, 3) //=> List
val arr: IntArray = intArrayOf(1, 2, 3) //=> int[]