欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Kotlin 基本数据类型

程序员文章站 2024-03-14 23:10:05
...

基本常量

  • 十进制:123
  • 长整型以大写的 L 结尾:123L
  • 16 进制以 0x 开头:0x0F
  • 2 进制以 0b 开头:0b00001011
  • 注意:8进制不支持
  • 可以使用下划线使数字常量更易读如:1000_0000_0000

比较两个数字

  • 三个等号 === 表示比较对象地址
  • 两个 == 表示比较两个值大小
      val a: Int = 10000
      println(a === a) // true,值相等,对象地址相等

      //经过了装箱,创建了两个不同的对象
      //注意必须加入? 相当于装箱,否则===的结果仍然是true 而不会是false
      val boxedA: Int? = a
      val anotherBoxedA: Int? = a

      //虽然经过了装箱,但是值是相等的,都是10000
      println(boxedA === anotherBoxedA) //  false,值相等,对象地址不一样
      println(boxedA == anotherBoxedA) // true,值相等

类型转换

由于不同的表示方式,较小类型并不是较大类型的子类型,较小的类型不能隐式转换为较大的类型。 这意味着在不进行显式转换的情况下我们不能把 Byte 型值赋给一个 Int 变量。

    var a: Byte = 1 // OK, 字面值是静态检测的
    var b: Int = b // 错误
    //代用其toInt()方法
    var c:Int=b.toInt()

位操作符

对于Int和Long类型,还有一系列的位操作符可以使用,分别是:

  • shl(bits) – 左移位 (Java’s <<)
  • shr(bits) – 右移位 (Java’s >>)
  • ushr(bits) – 无符号右移位 (Java’s >>>)
  • and(bits) – 与
  • or(bits) – 或
  • xor(bits) – 异或
  • inv() – 反向

字符

  • Kotlin 中的 Char 不能直接和数字操作,Char 必需是单引号 ' 包含起来的。比如普通字符 '0','a'。
    fun decimalDigitValue(c: Char): Int {
        if (c !in '0'..'9')
            throw IllegalArgumentException("Out of range")
          return c.toInt() - '0'.toInt() // 显式转换为数字
    }

布尔

  • 布尔值与java中布尔值类似,唯一的不同是若需要空引用布尔值会被装箱(也就是上篇文章基本语法中的 ? 所进行的操作)

数组

  • 数组用类 Array 实现,并且还有一个 size 属性及 get 和 set 方法,由于使用 [] 重载了 get 和 set 方法,所以我们可以用Array.[index] 获取数组某个位置(index)的值
  • 数组的创建两种方式:一种是使用函数arrayOf();另外一种是使用工厂函数
      //[1,2,3]
    val a = arrayOf(1, 2, 3)
    //[0,2,4]
    val b = Array(3, { i -> (i * 2) })

    //读取数组内容
    println(a[0])    // 输出结果:1
    println(b[1])    // 输出结果:2
  • 除了类Array,还有ByteArray, ShortArray, IntArray,用来表示各个类型的数组,省去了装箱操作,因此效率更高

字符串

  • 和 Java 一样,String 是可不变的。方括号 [] 语法可以很方便的获取字符串中的某个字符,也可以通过 for 循环来遍历:
      var str="abcd"
      for (c in str) {
          println(c)
      }
  • Kotlin 支持三个引号 """ 扩起来的字符串,支持多行字符串,比如:
        val text = """
        多行字符串
        多行字符串
          """
        println(text)   // 输出有一些前置空格
  • String 可以通过 trimMargin() 方法来删除多余的空白。
        val text = """
        -多行字符串
        -删除特定的"-"
        -多行字符串
        -Runoob
         """.trimMargin("-")
        println(text)    // 前置空格删除了

字符串模板

  • 字符串可以包含模板表达式 ,即一些小段代码,会求值并把结果合并到字符串中。 模板表达式以美元符($)开头,由一个简单的名字构成:
          val i = 10
          val s = "i = $i" // 求值结果为 "i = 10"
          println(s)
          val s = "runoob"
          val str = "$s.length is ${s.length}" // 求值结果为 "runoob.length is 6"
          println(str)
         val price = """
          ${'$'}9.99
          """
          println(price)  // 求值结果为 $9.99