Kotlin中的const常量

本来想作为kotlin一周总结的一个小点总结的,结果越来越多了,就单独拉出来练练

变量和常量

一般kotlin用到的是var和val

  • var: 变量(读写)
  • val:常量(只读)

但同时提供了一个const,val其实具有了大部分const拥有的功能,但是仔细对比了半天发现没什么卵用,但是又仔细一看,还有有点卵用的

const只能修饰val,不能修饰var

- 正确`const val testName = "ZhangSan"`
- 报错`const var testName = "ZhangSan"`

经过const修饰的属性只能用拼接const修饰的属性去拼接

//const报错1
val testName = "ZhangSan"
//const报错2
var testName = "ZhangSan"
//正确
const val testName = "ZhangSan"



const val constNameNormal: String = "constNameNormal$testName"
val nameNormal: String = "nameNormal$testName"

在java中引用不同

在kotlin中的引用

package mykotlin

/**
 * Created by TaoYuan on 2017/9/7 0007.
 */
fun main(args: Array) {
    println(constNameNormal)
    println(nameNormal)

    println(myObject.constNameObject)
    println(myObject.nameObject)

    println(MyClass.constNameCompanionObject)
    println(MyClass.nameCompanionObject)
}

const val testName = "ZhangSan"
//普通变量
const val constNameNormal: String = "constNameNormal$testName"
val nameNormal: String = "nameNormal$testName"

//object
object myObject {
    const val constNameObject: String = "constNameObject"
    val nameObject: String = "nameObject"
}

//companion object
class MyClass {
    companion object {
        const val constNameCompanionObject: String = "constNameCompanionObject"
        val nameCompanionObject: String = "nameCompanionObject"
    }
}

在java中的引用

        System.out.println(ConstDemoKt.getNameNormal());
        System.out.println(ConstDemoKt.constNameNormal);

        System.out.println(myObject.constNameObject);
        System.out.println(myObject.INSTANCE.getNameObject());

        System.out.println(MyClass.constNameCompanionObject);
        System.out.println(MyClass.Companion.getNameCompanionObject());

这个已经一目了然了。在kotlin中,由于不存在包名的概念,都是直接引用的,所以不存在问题,在java中,必须写全路径,实质上经过const修饰的常量,才是java中理解的常量

可能以后还会碰到其他的坑,会继续在总结里记录

你可能感兴趣的