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方式,避免频繁函数调用。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。