• 字面常量 kotlin(2)


    字面常量
    数值常量字面值有以下几种:
    十进制: 123
    Long 类型用大写 L 标记: 123L
    十六进制: 0x0F
    二进制: 0b00001011
    注意: 不支持八进制
    Kotlin 同样支持浮点数的常规表示方法:
    默认 double123.5 123.5e10
    Float f 或者 F 标记: 123.5f
    基本类型
    53
    数字字面值中的下划线(自 1.1 起)
    你可以使用下划线使数字常量更易读:
    val oneMillion = 1_000_000
    val creditCardNumber = 1234_5678_9012_3456L
    val socialSecurityNumber = 999_99_9999L
    val hexBytes = 0xFF_EC_DE_5E
    val bytes = 0b11010010_01101001_10010100_10010010
    表示方式
    Java 平台数字是物理存储为 JVM 的原生类型,除非我们需要一个可空的引用(如
    Int? ) 或泛型。 后者情况下会把数字装箱。
    注意数字装箱不必保留同一性:
    val a: Int = 10000
    print(a === a) // 输出“true”
    val boxedA: Int? = a
    val anotherBoxedA: Int? = a
    print(boxedA === anotherBoxedA) // !!!输出“false”!!!
    另一方面,它保留了相等性:
    val a: Int = 10000
    print(a == a) // 输出“true”
    val boxedA: Int? = a
    val anotherBoxedA: Int? = a
    print(boxedA == anotherBoxedA) // 输出“true”
    显式转换
    由于不同的表示方式,较小类型并不是较大类型的子类型。 如果它们是的话,就会出现下述
    问题:
    // 假想的代码,实际上并不能编译:
    val a: Int? = 1 // 一个装箱的 Int (java.lang.Integer)
    val b: Long? = a // 隐式转换产生一个装箱的 Long (java.lang.Long)
    print(a == b) // 惊!这将打印 "false" 鉴于 Long equals() 检测其他部分也是 Long
    所以同一性还有相等性都会在所有地方悄无声息地失去。
    基本类型
    54
    因此较小的类型不能隐式转换为较大的类型。 这意味着在不进行显式转换的情况下我们不能
    Byte 型值赋给一个 Int 变量。
    val b: Byte = 1 // OK, 字面值是静态检测的
    val i: Int = b // 错误
    我们可以显式转换来拓宽数字
    val i: Int = b.toInt() // OK: 显式拓宽
    每个数字类型支持如下的转换:
    toByte(): Byte
    toShort(): Short
    toInt(): Int
    toLong(): Long
    toFloat(): Float
    toDouble(): Double
    toChar(): Char
    缺乏隐式类型转换并不显著,因为类型会从上下文推断出来,而算术运算会有重载做适当转
    换,例如:
    val l = 1L + 3 // Long + Int => Long

  • 相关阅读:
    概率期望训练之五
    概率期望训练之四
    JavaScript Source Map详解
    JSON.parse、JSON.stringify
    Linux cp命令直接覆盖不提示方法
    Service Worker
    HTML5 应用程序缓存
    二分图
    Tarjan
    FFT迭代加深 & NTT 多项式求逆
  • 原文地址:https://www.cnblogs.com/mamamia/p/8384602.html
Copyright © 2020-2023  润新知