Kotlin学习笔记之const val与val
const的使用
const必须修饰val
const只允许在top-level级别和object中声明,使用方式如下:
constvalTHOUSAND=1000 objectmyObject{ constvalconstNameObject:String="constNameObject" } classMyClass{ companionobjectFactory{ constvalconstNameCompanionObject:String="constNameCompanionObject" } }
constval和val区别:
说到这,我们还是没有搞清楚const和val的区别,ok让我们看代码分析。
objectmyObject{ constvalconstObject:String="constObject" valnormalObject:String="normalObject" }
打开Androidstudio点击Tools->Kotlin->ShowKotlinByteCode
//classversion50.0(50) //accessflags0x31 publicfinalclasscom/example/kotlin/myObject{ //accessflags0x19 publicfinalstaticLjava/lang/String;constObject="constObject" @Lorg/jetbrains/annotations/NotNull;()//invisible //accessflags0x1A privatefinalstaticLjava/lang/String;normalObject="normalObject" @Lorg/jetbrains/annotations/NotNull;()//invisible //accessflags0x11 publicfinalgetNormalObject()Ljava/lang/String; @Lorg/jetbrains/annotations/NotNull;()//invisible L0 LINENUMBER144L0 GETSTATICcom/example/kotlin/myObject.normalObject:Ljava/lang/String; ARETURN L1 LOCALVARIABLEthisLcom/example/kotlin/myObject;L0L10 MAXSTACK=1 MAXLOCALS=1 ...... }
从字节码我们可以看到constval和val修饰对象的主要区别是:
- constval可见性为publicfinalstatic,可以直接访问。
- val可见性为privatefinalstatic,并且val会生成方法getNormalObject(),通过方法调用访问。
附:Kotlin中var和val的区别
Kotlin中有两个关键字定义变量,这两个关键字外形看着差别很小就只差了一个字母,但实际差别很大的。
var是一个可变变量,这是一个可以通过重新分配来更改为另一个值的变量。这种声明变量的方式和java中声明变量的方式一样。
val是一个只读变量,这种声明变量的方式相当于java中的final变量。一个val创建的时候必须初始化,因为以后不能被改变。
varname="zhangsan" println(name) name="lisi" println(name) valfinalValue="我是不可改变的"; println(finalValue);
总结:
当定义常量时,出于效率考虑,我们应该使用constval方式,避免频繁函数调用。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。