美文网首页
kotlin变量和表达式

kotlin变量和表达式

作者: Bfmall | 来源:发表于2022-10-26 14:29 被阅读0次

    一、变量、常量、引用类型

    /**
     * 定义编译时常量
     * 编译时常量只能是基本的类型(String, Int, Double, Float, Short,Boolean, Long, Byte, Char)
     * 编译时常量只能在函数之外定义,为什么?如果在函数之内定义,必须在函数运行时才能给常量赋值,何来编译时常量一说
     * 结论:只能在函数之外定义,就可以在编译阶段初始化了
     */
    const val PI = 3.1415
    
    class KtBaseTest01 {
    
        companion object {
            const val TAG = "KtBaseTest01"
        }
    
        fun test01() {
            /**
             * 可读可改   变量名  变量类型     值
             * var       name : String = "lanny"
             */
            var name : String = "lanny"
            name = "levone"//var变量可以改变值
            println(name)
            Log.d(TAG, "test01==>name="+name)
    
            /**
             * 不可改变的(只读变量)    变量名     变量类型   值
             * val                    age   :    Int =    26
             */
            val age : Int = 26
    //        age = 30//提示报错,变量不能被修改
            print(age)
            Log.d(TAG, "test01==>age="+age)
    
            /**
             * 类型自动推断
             */
            val info : String = "hello world"
            val info1  = "hello world"// 自动推断为String类型,类型可省略
            val info2  = 99//Int类型
    
        }
    
    
        fun test02() {
            Log.d(TAG, "test02==>PI="+PI)
    
            /**
             * 编译时常量不可修改值
             */
    //        PI = 45
            /**
             * 编译时常量只能在函数之外定义
             * 修饰符const不适用于局部变量
             */
    //        const val PI2 = 3.1415
        }
    
        /**
         * 学习查看kotlin反编译后字节码
         * Android Studio->Tools->Kotlin->Show Kotlin Bytecode
         *
         * L0
         * LINENUMBER 71 L0
         * BIPUSH 99
         * ISTORE 1
         * L1
         * LINENUMBER 72 L1
         * LDC "\u4f60\u597d\u5417"
         * ASTORE 2
         * L2
         * LINENUMBER 73 L2
         * ICONST_0
         * ISTORE 3
         * L3
         */
        fun test03() {
            val number1 = 99
            var number2 = "你好吗"
            var isShowLog = false
        }
    
        /**
         * kotlin 引用类型
         *
         * java中有两种数据类型:
         * 1.基本类型int, boolean...等
         * 2.引用类型String
         *
         * kotlin语言只有一种数据类型:
         * 看起来都是引用类型,实际上编译器会在java字节码中,修改成“基本类型”
         */
        fun test04() {
            val num1 : Int = 11
            var str1 : String = "好得很"
            var isLoad : Boolean = true
        }
    }
    

    二、range/when表达式、字符串模板

    const val TAG = "KtBaseTest02"
    class KtBaseTest02 {
        /**
         * range表达式 范围 从哪里..到哪里
         *
         * number in 1..59
         */
        fun test01() {
            val number  = 100
    
            if(number in 1..59) {
                Log.d(TAG, "test01==>不及格")
            } else if (number in 60..79) {
                Log.d(TAG, "test01==>及格")
            } else if (number in 80..100) {
                Log.d(TAG, "test01==>牛逼")
            } else {
                Log.d(TAG, "test01==>分数不在范围内")
            }
        }
    
    
        /**
         * when表达式
         * java中when是语句
         * kotlin中when是表达式,有返回值的
         * if和when同理
         */
        fun test02() {
            var day = 0
            val result = when(day) {
                1 -> "星期一"
                2 -> "星期二"
    //            else -> "日期不对"
                else -> {
                    "日期不对"
                }
            }
            println(result)//void 关键字无返回,用Unit代替了java的void关键字
            Log.d(TAG, "test02==>result="+result)
        }
    
        /**
         * kotlin 字符串模板
         */
        fun test03() {
            val addr = "故宫"
            val hour = 3
            Log.d(TAG, "我去$addr 玩了, 玩了$hour 小时")//java写法
            Log.d(TAG, "我去${addr} 玩了, 玩了${hour}小时")//kt 字符串模板写法
    
            //java中if是语句,有局限性
            //,kt中if是表达式,有返回值,所以更灵活
            val isLogin = false
            Log.d(TAG, "登陆结果:  ${if (isLogin) "login success" else "login failure"} ")
        }
    }
    

    相关文章

      网友评论

          本文标题:kotlin变量和表达式

          本文链接:https://www.haomeiwen.com/subject/mxiazrtx.html