kotlin基础学习笔记之const延伸

一、前言

        一般kotlin用到的是var和val
                - var:变量(读写)
                - val:常量(只读)

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

二、介绍

        查看kotlin in action,pdf文档里面介绍。大致意思是在kotlin中的顶级属性,会以getter(val 和 var)/setter(var才有)的形式暴露给Java,如果你想让其以public static final的字段呈现给调用者,可以val前面加上const修饰符。

注:kotlin中const只能用在顶级属性,以及object对象的属性中(伴随对象也是obejct)。

 

三、区别

        1.经过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"

        2.在java中引用不同

//带1的属性是没有用const修饰的,没带1的属性是用了const修饰的
const val age: Int = 28
val age1: Int = 28
 
object test1 {
    const val name: String = "liuliqianxiao"
    val name1: String = "liuliqianxiao"
}
 
class Person {
    companion object {
        const val sex: Int = 1
        val sex1: Int = 1
    }
}

在kotlin中的调用如下

class Text{
 
    fun main(args: Array<String>) {
        println(age)
        println(test1.name)
        println(Person.sex)
 
        println(age1)
        println(test1.name1)
        println(Person.sex1)
    }
}

在java中的调用如下

public class Test {
 
    public static void main(String[] args) {
        //在没有加const修饰时应该如此调用
        //top-level属性,
        System.out.println(ConstTest.getAge1());
        //单列对象的属性
        System.out.println(test1.INSTANCE.getName1());
        //类的伴随对象的属性
        System.out.println(Person.Companion.getSex1());
 
 
        //加了const修饰之后的调用
        System.out.println(ConstTest.age);
        System.out.println(test1.name);
        System.out.println(Person.sex);
 
    }
 
}

从字节码我们可以看到const val 和val修饰对象的主要区别是:

        没有使用const ,在kotlin中,都是直接引用的。在java中,必须写全路径,通过getter方法获取。
        const val 可见性为public final static,可以直接访问。
        val 可见性为private final static,并且val 会生成方法getNormalObject(),通过方法调用访问。

四、总结

        当定义常量时,出于效率考虑,我们应该使用const val方式,避免频繁函数调用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值