本来想作为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<String>) {
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中理解的常量
可能以后还会碰到其他的坑,会继续在总结里记录