• Kotlin基础类型


    numbers类型:

    数字类型的数据有Byte,Short,Float,Int,Long,Double,这些类型在java中也都是基础数据类型。

    与java不同之处在于:

    • Char类型已经不再是数字类型了。
    • 在java之中基础数据类型都对应有一个包装类,如int,对应Integer,而在kotlin中基础数据类型已经是类类型的了。
    • 不同类型的数字之间不能自动转换,需要明确调用相应的方法。有一系列的转换方法,toShort,toByte,toInt……想转成什么类型,就调用对应的toXX()方法即可
    • 支持二进制(0b1111),十进制(123456),十六进制(0xFFFF00),但是不支持八进制。
    • 数字之间允许用下划线分割,更方便阅读
    • 位运算符不在是>>,<<,>>>,<<<,&,!,~,|,Kotlin中用的是一个叫做中缀表达式的玩意儿
        var a: Int = 100
        var b: Short = 10
        a = b//error require Int,found Short
        a = b.toInt()

      //数字之间可以添加下划线,方便阅读
      var c: Int = 1000_1000_1000
      var d: Int = 0b11111_1111
      var e: Int = 0xFF_FF_FF_FF

      var f: Char = 1//error Char类型必须以''包起来
      var g: Char = 'a'

      //位运算
      tempValue1 shl 2 //<<2
      tempValue1 shr 2//>>2
      tempValue1 ushr 2//>>>2 我相信没有有人会好奇咋没有<<<2吧?如果你好奇了,我也不会告诉你为啥
      tempValue1 and tempValue2// tempValue1 & tempValue2
      tempValue1 or tempValue2// tempValue1 |tempValue2
      tempValue1 xor tempValue2// tempValue1 ^ tempValue2
      tempValue1.inv()// ~tempValue1

    与java相同之处在于:

    • 依旧没有原生提供unsigned无符号数据类型。
    • 数据类型长度是一样的,Char(8),Short(16),Int(32),Float(32),Long(64),Double(64)
    • 虽然Kotlin中数字类型是类类型,但是申明数字类型变量依旧和java类似:val a: Int = 1,var b:Short = 1,Float类型变量后面要加f/F,Long类型后面只能加L,小l会编译不通过

    那么在Kotlin中是怎么把有符号转成无符号的数据类型的呢,方法如下(Java中也是一样的):

    fun getUnsignedByte(value: Byte): Int {
        return value.toInt() and 0xFF
    }
    
    fun getUnsignedShort(value: Short):Int{
        return value.toInt() and 0xFFFF
    }
    
    fun getUnsignedInt(value: Int): Long{
        return value.toLong() and 0xFFFFFFFF
    }

    上面分别是将有符号Byte,Short,Int转成对应的无符号数据,so,不要再喷Kotlin和Java的数据类型不完整啦,没有无符号类型啦,巧妙运用位运算,有符号转无符号,so easy!

    (写到这个so easy,就想起最近隔壁组的项目经理老提起步步高点读机那个广告中的小姑娘高考考的分数很低的梗)

    Char类型

    为什么要单独说一下这个Char类型,上面已经提到过,在Kotlin中Char已经不再是数字类型

    fun check(c: Char) {
        if( c == 1){
            //error: Operator '==' cannot be applied to 'Char' and 'Int'
        }
    }

    //正确申明char变量的姿势:
    var char1: Char = 'a'
    //咋把Char转成Int呀?上面说咯,toInt即可
    var a: Int = 'a'.toInt()

    Bool类型

    就2个只true,false

    &&,||,!运算规则和Java相同

    Array类型

    数组的申明在Kotlin中是迥异于Java的,数组现在变成了一个泛型类。这意味着只能放同类型对象了。对数组调用下表运算符[]其实是利用了运算符重载的特性

        var tempArray2: Array<Int> = Array(5, { i -> i * i })//利用数组的构造函数
        var tempArray: Array<Int> = arrayOf(1, 2, 3)//利用库函数申明一个函数
        var tempArray1: Array<Int?> = kotlin.arrayOfNulls<Int>(100)//申明100个元素的空数组
    //  var tempArray5: Array<Long> = tempArray//error 不能相互转换
        var array: Array<Any> = arrayOf(1.0f, 0xFF, 3, "我是中国人")//申明一个可以装任意数据类型的数组

    Kotlin库还提供了一些对于特定类型数据的Array类,如ByteArray,ShortArray,IntArray等等。

    String类型

    var str1: String = "Hello,Kotlin"//单行字符串
    var multiStr:String = """
        啦啦啦啦
    啦啦啦
    嘿嘿嘿
    """//多行字符串

    string类型最大的不同就在于模板字符串咯

     var id: Int = 1
     var name: String = "liuliqianxiao"
     var result: String = "the id is $id and the name is $name"//还记得在java中怎么拼字符串吗
     var result1: String = "the name`s length is ${name.length}"//可以在${}的大括号中写入表达式

    是不是感觉模板字符串很好用呢?

    好吧,这篇Kotlin中基础类型就简单写到这里咯,这里对比了一些Java,有可能写的不对,也有可能新时代的java已经不是我描述的酱紫了。错误之处依旧请不留情面的指出来。

  • 相关阅读:
    额外的 string 操作
    vector 对象是如何增长的
    顺序容器操作
    容器库概览
    顺序容器概述
    特定容器算法
    泛型算法结构
    再探迭代器
    定制操作
    使用关联容器
  • 原文地址:https://www.cnblogs.com/liuliqianxiao/p/7138001.html
Copyright © 2020-2023  润新知