• 【Kotlin精简】第1章 基础类型


    1 Kotlin基础类型

    Kotlin中,我们可以调用任何变量的成员函数和属性,从这个角度来说,一切皆对象。某些类型可以有特殊的内部表现。例如:数字字符布尔型在运行时可以表现为基础类型(primitivetypes)

    1.1 数值

    Kotlin的基本数值类型包括ByteShortIntLongFloatDoubleBoolean等。不同于Java的是,字符不属于数值类型,是一个独立的数据类型
    在这里插入图片描述

    1.1.1 字面常量

    Long类型:用L​做标记,​​123L​​
    float 类型:用f或者F标记:​​123.5f​​

    1.1.2 数值字面值中的下划线

    下划线可以使数值常量更具可读性:

    val oneMillion = 1_000_000
    
    • 1

    1.1.3 表现形式

    == 值对比
    === 地址对比

    1.1.4 显式转换

    小类型不会隐式转换成大类型。不通过显示转换,我们无法把一个Byte​赋值给​Int

    val b: Byte = 1 // OK, literals are checked statically
    val i: Int = b // ERROR
    
    val i: Int = b.toInt()  // OK: explicitly widened
    
    val l = 1L + 3 // Long + Int => Long
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    每个数值类型都支持如下转换:

    ​​toByte(): Byte​​
    ​​toShort(): Short​​
    ​​toInt(): Int​​
    ​​toLong(): Long​​
    ​​toFloat(): Float​​
    ​​toDouble(): Double​​
    ​​toChar(): Char​​

    1.1.5 运算

    如下是位运算操作符的完整列表(只用于​​Int​​​和​​Long​​):

    shl(bits)​​​ - 有符号左移(Java 的 ​​<<​​)
    ​​shr(bits)​​​ - 有符号右移(Java 的 ​​>>​​)
    ​​ushr(bits)​​​ - 无符号右移(Java 的 ​​>>>​​)
    ​​and(bits)​​ - 位的与运算
    ​​or(bits)​​ - 位的或运算
    ​​xor(bits)​​ - 位的异或运算

    1.1.6 浮点数比较

    相等检查:​​a == b​​​和​​a != b​​
    比较操作符:​​a < b​​​,​​a > b​​​,​​a <= b​​​,​​a >= b​​
    范围初始化和范围检查:​​a…b​​​,​​xina…b​​​,​​x!ina…b​​

    当操作数​​a​​​和​​b​​​静态已知为类型​​Float​​​或​​Double​​​,以及它们对应的可空类型。但是为了支持通用的使用场景以及提供完整的排序,当操作数不是浮点数的静态类型(如​​Any​​​、​​Comparable<…>​​​,类型参数)时,运算操作会使用​​Float​​​和​​Double​​​​​equals​​​和​​compareTo​​实现,这会导致异与标准,因此:

    ​​NaN​​等于它自己
    ​​NaN​​​大与所有其他元素,包括​​POSITIVE_INFINITY​​
    -0.0​​​小于​​0.0​​

    1.2 字符

    ​​Char​​表示字符,不能直接用作数值:
    字符用单引号来表示:​​'1'​​。特殊字符可以使用反斜杠转义
    特殊字符可以用反斜杠转义。支持的转义序列有:​​\t​​​、​​\b​​​​​\n​​​​​\r​​​、​​\'​​​、​​\"​​​​​\\​​​​​\$​​​。如果要编译其他字符,可以使用 Unicode转义序列语法:​​\uFF00​​

    我们可以显示地把一个字符转换成一个Int数值:

    fun decimalDigitValue(c: Char): Int {
        if (c !in '0'..'9')
            throw IllegalArgumentException("Out of range")
        return c.toInt() - '0'.toInt() // Explicit conversions to numbers
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    就像数值那样,字符的空引用也会自动装箱。装箱操作不会保留字符的身份(identity)。

    1.3 字符串

    字符串由 ​​String​​​ 表示。字符串是不可变的。字符串的元素可通过下标访问:​​s[i]​​​。字符串可通过 ​​for​​ 循环遍历。
    纯字符串通过三个引号(​​"""​​)来界定,它不会包含转义而且能够包含换行和任意字符:

    val text = """
        for (c in "foo")
            print(c)
    """
    
    • 1
    • 2
    • 3
    • 4

    可以通过 ​​trimMargin()​​ 去除开头的空字符:

    // 默认情况下,`​​|​​​` 用作 `margin` 前缀,
    // 但是也可以使用其他字符作为参数传给 `​​trimMargin​​​`,例如 ​​`trimMargin(">")`​​。
    val text = """
        |Tell me and I forget
        |Teach me and I remember.
        |Involve me and I learn.
        |(Benjamin Franklin)
        """.trimMargin()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    字符串可以包含模板表达式:

    // 模板表达式以美元符号($)或大括号内的任意表达式
    val s = "abc"
    val str = "$s.length is ${s.length}" // evaluates to "abc.length is 3"
    
    // 在纯字符串(不支持转义)中展示 ​​$​​ 符号
    val price = """
    ${'$'}9.99
    """
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    1.4 布尔型

    与Java一致。
    ​​Boolean​​​表示布尔型,有两个值:​​true​​​ 和 ​​false​​。
    布尔的可空引用会自动装箱。

    内置操作符包括:

    ​​||​​ - lazy disjunction
    ​​&&​​ - lazy conjunction
    ​​!​​ - negation

  • 相关阅读:
    进阶JS-去重
    Axure药企内部管理平台+企业内部管理系统平台
    css相关知识整理
    数据结构——红黑树
    地球+卫星运动轨迹
    视频博主都在用的 音频素材网,免费还可商用
    Windows 10下安装labelImg标注工具!
    linux操作Vim
    JavaScript-变量类型
    【REACT-router】
  • 原文地址:https://blog.csdn.net/u010687761/article/details/133210711