1. 基本数据类型kotlin的基本数据类型跟Java等高级语言分类一样,包括
    、整型、长整型、浮点型、双精度、布尔型、字符型、字符串这几种常见类型,不同于 Java 的是,字符不属于数值类型,是一个独立的数据类型。因为Kotlin 中没有基础数据类型,只有封装的数字类型。所以较小类型并不是较大类型的子类型,较小的类型不能隐式转换为较大的类型。
    kotlin与java的基本数据类型对比
    Kotlin数据类型 Int
    Long
    
    Float
    
    Double
    
    Boolean
    
    Char
    
    String
    
    Kotlin类型转换 toInt
    toLong
    

     toFloat

    toDouble
    
    --  toChar  toString
    java数据类型
    int和Integer
    
    long和Long
    
    float和Float
    
    double和Double
    
    boolean和Boolean
    
    char
    
    string
    

    和java一样我们可以声明一些常量、变量、静态等当写法有区别
    java 格式 修饰词  数据类型   数据名
        int i1 = 0; //变量
        final int i2 = 0; //常量
        static int i3 = 0; // 静态
    

    kotlin 格式 修饰词  数据名 : 数据类型 

       var i1: Int = 0  //变量
       val i2: Int = 0  //常量
       companion object var i3: Int =0  //静态变量
    

    Kotlin 拥有空安全机制。 像String类型直接赋值为null会报异常,如果我们想赋值null就得在给数据类型加个标记"?",
    如果为空时我们操作怎么办?放心如果为空它不会执行,你还可以用"?:"进行为空后的操作,
    你还可以用"!!."进行断言,但这样得自己排雷如果为空你操作就会报错

        var str: String? = null
        var l: Int=0 
        l=str?.length?:-1
        //str = "abcd"
        l=str!!.length //显而易见str为空它运行会报错
    
  2. 数组数组用类 Array 实现和其他数组Array,并且还有一个 size 属性及 get 和 set 方法,由于使用 [] 重载了 get 和 set 方法,所以我们可以通过下标很方便的获取或者设置数组对应位置的值。
    * 与 Java 不同的是,Kotlin 中数组是不协变的(invariant)。数组用类Array的创建方式:一种是使用函数arrayOf(),另外一种是使用工厂函数
            val array: Array<String> = arrayOf("1","2","3")
            //array1数组的大小为2 值有["0","1"]
    //        var array1: Array<String> = Array(2 ,{i -> i.toString})
            val array1: Array<String> = Array(2){ i -> i.toString()}
            //元素操作
            val length: Int = array.size;
    //        var get: Int = int1_array.get(0);
            var str: String = array[0];
    //        array.set(0,1);
            array[0] = "233";
    

    数组除了类Array,还有IntArray, BooleanArray, CharArray等用来表示各个类型的数组,省去了装箱操作,因此效率更高,其用法同Array类似.
    * 不存在StringArray,因为String是一种特殊的基本数据类型

        val ints: IntArray = intArrayOf(1,2,3)
        val booleans: BooleanArray = booleanArrayOf(true,false,true)
        val floats: FloatArray = floatArrayOf(1.0f,1.2f,1.5f)
    
  3. 字符串字符串类型与基本变量类型之间的转换方式:
    Java的实现方式比较烦琐,既需要其他类型的类名,又需要该类型的转换方法。而在Kotlin这边,转换类型相对简单,并且与基本数据类型之间的转式更友好,也更方便记忆。
    字符串转换为其他数据类型的Kotlin与Java方式对比
    字符串转换目标 Kotlin转换方式 java转换方式
    字符串(str)转整型  str.toInt Integer.parseInt(str)
    字符串(str)转长整型  str.toLong Long.parseLong(str) 
    字符串(str)转浮点数   str.toFloat  Float.parseFloat(str) 
    字符串(str)转双精度   str.toDouble  Double.parseDouble(str)
    字符串(str)转布尔型  str.toBoolean  Boolean.parseBoolean(str)
    字符串(str)转数组   str.toCharArry str.toCharArry 
    字符串的常用方法:这方面kotlin基本兼容java的相关方法(indexOf,substring,split)
    *split方法在java中的返回值是String数组,而在kotlin中返回String队列(List<String>)
     val str:String = "123.abc.一二三"
     var upStr:String? = null
     if(str.indexOf(".")>0){
            //upStr值为123
            upStr = str.substring(0,str.indexOf("."))
     }
    val list:List<String> = str.split(".")
    var upList:String = ""
    for (i in list){
             //upList值为123|abc|一二三|
             upList =upList + i +"|"
    }
    

    字符串拼接:$变量名   ${变量运算}   如果字符串中我们需要一个美元符号怎么办 我们可以 ${'$'}  \$

    upList ="$upList i|"
    
  4. 容器与java类似,kotlin也拥有三类基本的容器(集合、队列、映射),但kotlin对变量的操作修改比较谨慎,所以又分为只读容器(Set、List、Map)和可变容器(MutableSet、MutableList、MutableMap)
    既然都是容器那么他们必定有相同的容器方法:
    isEmpty:判断该容器是否为空
    isNotEmpty:判断该容器是否非空
    contains:判断该容器是否包含指定元素
    clear:清空该容器
    iterator:获取该容器的迭代器
    count:获取该容器包含元素个数
    size:获取该容器包含元素个数
    遍历方法(for-in循环、迭代器遍历、*forEach遍历)
    初始化格式:集合(Set/MutableSet):容器内部的元素不按顺序排列、存在唯一性,不能用下标访问添加相同元素时会覆盖
    MutableSet的add方法添加元素,位置不确定(无序)
    MutableSet没有修改元素方法
    MutableSet的remove方法用于删除指定元素
    队列(List/MutableList):容器内部的元素按顺序排列、能用下标([ ])访问
    MutableList的get方法获取指定位置元素
    MutableList的add方法添加元素到队列末尾,也可添加指定位置
    MutableList的set方法替换或修改指定位置元素
    MutableList的removeAt方法用于删除指定位置的元素
    映射(Map/MutableMap):容器内部的元素是一组键值对(Key-Value)
    MutableMap的put方法添加元素,映射会先根据键名寻找同名元素,如果找不到就添加新元素,如果找得到就用新元素添加旧元素
    MutableMap的containsKey判断是否存在指定键名的元素
    MutableMap的containsValue判断是否存在指定键值的元素
    MutableMap的remove方法用于删除指定键名的元素
    MutableMap添加元素的格式:键名  to 键值     或者   Pair(键名,键值)
           var sList : List<String> = listOf("123","13","14");
            //for-in循环 1
            var desc = "";
            for (item in sList){
                desc = "${desc}名称:${item}\n";
            }
            //for-in循环 1
            desc = "";
            // sortBy表示升序排列,后面跟的是排序条件
            sList.sortedBy {
                it.length
            }
            // sortByDescending表示降序排列,后面跟的是排序条件
            sList.sortedByDescending {
                it.length
            }
            // indices是队列的下标数组。如果队列大小为10,下标数组的取值就为0~9
            for (i in sList.indices){
                desc = "${desc}名称:${sList[i]}\n";
            }
            //迭代器遍历
            var desc1 = "";
            var iterator = sList.iterator();
            //如果迭代器还存在下一个节点,就继续取出下一个节点的记录
            while (iterator.hasNext()){
                var next = iterator.next()
                desc1 = "${desc1}名称:${next}\n";
            }
            //foreach遍历
            var desc2 = "";
            sList.forEach{
                desc2 = "${desc2}名称:${it}\n";
            }
            tv_hello.text = desc2;
            //to方式映射
            var goodsMap : Map<String,String> = mapOf("苹果" to "iphone 11","小米" to "小米 9","魅族" to "魅族pro16s");
            //Pair方式映射
            var goodsMutMap : MutableMap<String,String> = mutableMapOf( Pair("苹果" , "iphone 11"),
                Pair("小米" , "小米 9"), Pair("魅族" , "魅族pro16s"));
    
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐