基本类型

回到目录
项目源码 kotlin-basics 项目


本节将描述 Kotlin 中使用的基本类型: 数字, 字符, 布尔值, 数组, 字符串.

数字

Kotlin 中有 6 种内置的类型来表示数字:

类型 位宽
Byte 8
Short 16
Int 32
Long 64
Float 32
Double 64

Char 类型在 kotlin 中不是数值哦!

进制

Kotlin 中有十进制, 二进制, 十六进制, 没有八进制

二进制用 0b 表示, 例如 0b1011

十六进制用 0x 表示, 例如 0xFF

Byte

Byte 的宽度是 8 位, 所以它的取值范围是 [-128, 127]; 在这个范围用 Byte 类型变量
会比较节省内存.

    @Test
    fun testByte() {
        var count: Byte = 100
        assertEquals(100, count)
    }
Short

Short 的宽度是 16 位, 所以取值范围是 [-32768, 32767].

    @Test fun testShort() {
        // 这里用 _ 使数值可读性更好, 一下就能看出是 3 万
        val total: Short = 3_0000
        assertEquals(30000, total)
    }
Int

Int 的宽度 32 位, 取值范围很大, 基本够用, 2 的 32 次方嘛.

    @Test fun testInt() {
        // 3 亿
        // 默认 Int
        var num = 3_0000_0000
        assertEquals(3_0000_0000, num)
        // 使用 is 关键字来判断类型
        assertTrue(num is Int)
    }
Long

Long 宽度是 64, 只有 Int 不够用了才考虑它, 取值范围更大; Long 类型的数值后要加
L 为 Long 类型对象, 否则会当成 Int.

    @Test fun testLong() {
        // 后面要加 L
        var bigNum: Long = 3_0000_0000_0000_0000L
        assertEquals(3_0000_0000_0000_0000L, bigNum)
    }
Float

Float 宽度是 32 位的, 数值后需要加 F 标记一下, 否则会当成 Double 类型.

    @Test fun testFloat() {
        // 标记了 f, 就可以省略类型了, 因为编译器可以推断出来
        var pi = 3.1415926f
        assertEquals(3.1415926f, pi)
        assertTrue(pi is Float)
        // assertTrue(pi is Double) // 编译就报错了
    }
Double

Double 宽度是 64 位的, 是小数类型的默认类型.

    @Test fun testDouble() {
        // 默认 Double 类型
        var pi = 3.14
        assertEquals(3.14, pi)
        assertTrue(pi is Double)
    }

字符

Char 类型表示字符, 用单引号 '' 包裹. 例如 '1', 'a'. 特殊字符可以用反斜杠转义.

'\t', '\b', '\n', '\r', '\'', '\"', '\\', '\$'

字符用 Unicode 编码表示: '\uFF00'

布尔值

Boolean 类型表示布尔值, 有两个值 true, false

数组

Array 类型表示数组. 有操作符 [] 重载的 get(), set() 方法, 有 size 属性.

Array 源码如下:

package kotlin

public class Array {
    public inline constructor(size: Int, init: (Int) -> T)

    public operator fun get(index: Int): T

    public operator fun set(index: Int, value: T): Unit

    public val size: Int

    public operator fun iterator(): Iterator
}

可以用内置的 arrayOf() 系列函数来创建一个数组. 比如 intArrayOf.

实例:

    @Test fun testArray() {
        val names: Array = arrayOf("codergege", "张三", "李四")
        val ages = intArrayOf(11, 22, 33) // 类型推断 Array
        // 数组有 size 属性
        assertEquals(3, names.size)
        // get, set 使用 [] 操作符重载了
        assertEquals(11, ages[0])
    }

字符串

String 类型表示字符串, 它跟数组很像, 但字符串是不可变的(没有 set() 方法).

length 属性, 用 [] 取出字符

"" 包裹的字符串字面量中, 可以进行转义.

        var name: String = "codergege" // 即使用 var 来声明, String 变量 name 仍然是不可变对象.
        // 可以取出单个字符
        assertTrue(name[0] == 'c')
        // name[0] = 'C' // 编译不通过, String 是不可更改的
        // 可以转义
        var book = "kotlin\tin\taction"
        // 打印看看
        println(book)

用三个引号来表示 "raw string". 里面是不能包含转移字符的, 因为不需要. 但是如果想
加入 $ 符, 得用 ${'$'} 来表示. 下面马上会讲到字符串模板.

        // Raw string
        val words = """
            I'm codergege.
            Kotlin is a lot of funs.
              Ok~~ ${'$'}
        """.trimIndent() // 把缩进给去掉了
       // 打印看看效果
        println(words)

打印结果是:

I'm codergege.
Kotlin is a lot of funs.
  Ok~~ $
字符串模板

Kotlin 中可以使用字符串模板, 又一个十分方面的特性, 用途广泛.

传统字符串和原始字符串中都可以使用模板, 这也是为什么原始字符串中需要用 ${'$'}
来表示 $ 的原因.

直接看实例:

        // 字符串模板
        val myname = "codergege"
        val age = 28
        val hello = "我叫 $myname, 今年已经 ${age - 10} 岁了"
        assertEquals("我叫 codergege, 今年已经 18 岁了", hello)

普通的变量可以直接 $myname 这么用, 表达式得用 ${}.

回到目录

你可能感兴趣的:(基本类型)