Kotlin中const val、val 以及 val 间在声明变量时的区别

Kotlin编译时常量全解析:为什么const val比val更适合做全局配置? 本文深入解析了Kotlin中const val与val的本质区别,从JVM字节码层面揭示了const val作为编译时常量的优势。它通过内联优化实现零运行时开销,并能作为注解参数使用,尤其适合定义全局配置、功能开关和路由路径,从而提升模块化应用的启动性能和解耦程度。 阅读详情

Kotlin中const val、val 以及 val 间在声明变量时的区别

Kotlin 源码 [具体的说明请阅读下面的源码、注释以及反编译后的代码,建议亲自动手研究]

//Kotlin 常量定义  【类似于Java中的 public static final int C = 3;】
const val C = 3

fun main() {
    println(KotlinClass().a)
    println(KotlinClass().b)
    println(C)
    println(Companion.COMPANION_CONST_VAL)
    println(Singleton.SINGLETON_CONST_VAL)
}

class KotlinClass {
    //声明变量a 【类似于Java中的 private int a = 1;】
    // $ 如果此变量声明与main()函数同一层级的情况下则为 private static int a = 1; $
    var a = 1
    //声明只读变量b 【类似于Java中的 private final int b = 2;】
    val b = 2
}

class Companion {

    /**
     * companion object 关键字用于修饰静态函数
     */
    companion object {
        //在 companion object 成员中声明
        const val COMPANION_CONST_VAL = 10;
    }

}

/**
 * object 关键字用于修饰静态类
 */
object Singleton {
    //在静态类中进行常量声明
    const val SINGLETON_CONST_VAL = 20;
}

反编译后的代码 [以下代码均通过 jd-gui 进行反编译,部分次要的干扰代码已经删除]

  • VariableLearnKt.java 【函数 main() 所在的类】
    VariableLearnKt.java
  • KotlinClass.java
     KotlinClass.java
  • Companion.java
    Companion.java
  • Singleton.java
    Singleton.java
Kotlin变量与常量深度解析:var、val、const val及注释实战 在Kotlin编程中,变量声明与常量管理是构建可靠应用的基础。var与val的核心区别在于可变性控制,val引用不可变但对象内容可修改,而const val提供编译期常量优化。理解这些概念能显著减少状态相关bug,提升代码可维护性。这些技术广泛应用于Android开发、后端服务等场景,尤其在并发处理和API设计中至关重要。本文深入探讨Kotlin变量、常量及注释的最佳实践,涵盖从Java迁移的思维转变和工程管理策略,帮助开发者写出更简洁、安全的代码。 阅读详情

相关推荐

Kotlin学习笔记之const val与val

主要给大家介绍了关于Kotlin学习笔记之const val与val的相关资料,并给大家介绍了const val和val区别以及Kotlin中var和val的区别,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧

Kotlin “ const val “ 和 “ val “ 的区别

const val和 val 的区别: const 关键字 不可单独使用,只能与 val 组合使用. 1. const val 只可以修饰方法外(top-level)变量,val 无限制 2.const val 字节码为public final static,可以直接访问。而 val 字节码为private final static,并且val 会生成方法getNormalObject(),通过方法调用访问。 ...

赵星海 2237

终端效率神器:Tmux 安装与使用全指南

终端效率神器:Tmux 安装与使用全指南

身在被窝_心在编程 1357

kotlin中const和val的区别

const:Compile time constants,只能修饰primitve类型和String类型, JVM的存储空间属于静态存储区 val:Runtime Read-Only variable,可修饰prmitive类型、String类型以及方法调用的返回值或者构造方法的返回对象,JVM存储在栈中 var:Mutable varialble ...

程序人生 1026

第二十届全国大学生智能汽车竞赛极速光电组:MicroPython与恩智浦RT1021的硬件编程实战指南

本文为参加第二十届全国大学生智能汽车竞赛极速光电组的同学提供了一份详尽的MicroPython与恩智浦RT1021硬件编程实战指南。文章深入剖析了选择MicroPython与RT1021这对组合的优势,详细讲解了从开发环境搭建、基础硬件控制(如GPIO、PWM、编码器、CCD)到系统集成(平衡控制、循迹算法)与多任务调试的全过程,旨在帮助参赛者降低嵌入式开发门槛,高效备赛。

wdx0123456的博客 843

HTML入门(详细教程),前端入门从这里开始

HTML基础教程,网页框架搭建,表单制作,了解HTML标签的基本用法,每个标签具备哪些属性。

wandertp的博客 1283

“ const”和“ val”有什么区别?

与其他编程语言一样,在Kotlin中,属性可以是可变的(可以更改)或不可变的(不能更改)。我们使用关键字const并val声明一个不可变的属性。开发人员常常对这些术语感到困惑,例如何时使用...

qxf865618770的博客 1260

从NASA DataPort下载到PyTorch Dataset:手把手处理USGS光谱库的AVIRIS数据

本文详细介绍了如何从NASA DataPort下载USGS光谱库的AVIRIS高光谱数据,并将其转化为PyTorch Dataset对象。内容涵盖数据获取、预处理、辐射定标及高效数据加载技巧,特别针对AVIRIS数据的水吸收波段剔除和波段分组标准化进行了重点讲解,为环境监测、地质勘探等领域的研究者提供实用指南。

weixin_30607659的博客 281

kotlin中var、val、const val区别

var var定义的变量private,但带有public的set和get属性: var varObject: String = "varObject" const val const val定义的常量 const val constObject: String = "constObject" val val定义的常量private,带有public的get方法 val normalO...

火星男孩的分享空间 8616

NLP-Beginner 任务一:基于机器学习的文本分类(超详细!!)

NLP-Beginner 任务一:基于机器学习的文本分类传送门一. 介绍1.1 任务简介1.2 数据集1.3 流程介绍二. 特征提取2.1 词袋特征(Bag-of-word)2.2 N元特征 (N-gram)三. 最优化求解3.1 Softmax回归介绍3.2 损失函数3.3 梯度下降3.4 学习率四. 代码及实现4.1 实验设置4.2 结果展示4.3 代码新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、

0oTedo0 9929

Ubuntu 20.04 + CARLA 0.9.13 长时运行崩溃?手把手教你定位和缓解Segmentation fault

本文详细解析了Ubuntu 20.04环境下CARLA 0.9.13仿真平台长时运行崩溃问题,提供了从内存监控到核心转储分析的系统级诊断方法,并分享内存泄漏缓解、稳定性优化配置等实用解决方案,帮助开发者构建更稳定的自动驾驶仿真环境。

weixin_28362173的博客 252

kotlin中const 和val的区别

如果你需要声明常量并希望在编译时就确定其值,可以使用const。如果你只是需要声明不可变的变量,可以使用val。val: 相当于java中的final ,运行时确定变量的值,值固定const val 相当于java中 staic final,它的值在整个应用程序的生命周期内是固定的。

琦琦的博客 920

C#调用企业微信JS-Sdk实现扫描二维码

企业微信JS-SDK是企业微信面向网页开发者提供的基于企业微信内的网页开发工具包。通过使用企业微信JS-SDK,网页开发者可借助企业微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用企业微信分享、扫一扫等企业微信特有的能力,为企业微信用户提供更优质的网页体验提示:生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是H5应用调用企业微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。

清浅 937

kotlin的val声明的变量是常量吗

比如在Java中,常量通常指的是用final关键字修饰的静态变量,并且需要在编译时就能确定其值,即编译时常量。而Kotlin中的val虽然也是不可变的,但它的值并不一定是在编译时确定的。const关键字修饰的val才是编译时常量,必须声明在顶层或者伴生对象中,并且其值必须是基本类型或者String。例如,val适合用于在对象生命周期内不可变的变量,而const val则用于全局的、编译时确定的常量。需要说明val的不可变性是运行时的保证,而并非编译时的强制,除非使用const val。

yzpbright的博客 685

国科大学习资料--遥感原理集图像处理(尤红建)--2019年期末考试

国科大学习资料–遥感原理集图像处理(尤红建)–2019年期末考试 国科大学习资料–遥感原理集图像处理(尤红建)–2019年期末考试 国科大学习资料–遥感原理集图像处理(尤红建)–2019年期末考试 ================================================================== ================================================================== ==============

无名何许人的博客 1469

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Kotlin中的var,val,const val区别

1.var是变量,可对其进行读取和修改(读写) 2.val是常量,只能对其进行读取,而不能修改(读) 3.const只能用来修饰val,并且Const 修饰的val只能定义在top level或者在objects中。top level指的是在最外面的类的外面,表示该常量属于整个文件,而非某个类。object可以指最外面的object和companion object。 从字节码的角度分析: ...

qq_28334237的博客 1082

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Kotlin中的变量、常量、const

变量和常量 在Kotlin中使用val和var关键字来声明变量,其语法如下: val|var 变量名[: 变量类型][= 值] val关键字声明一个常量,赋值以后不再修改。 var关键字声明一个变量,可以重复赋值。 下面声明一个字符串变量a和一个字符串常量b,并设置初始值 var a : String = "a";//声明一个变量a,并设置初始值。 val b : String = "b";//声...

yumodev 6330

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Kotlin变量声明与作用域详解:你真的懂var和val吗?

掌握Kotlin变量用法,轻松提升代码安全性与可读性。本文详解var与val的声明方式、作用域规则及适用场景,解析可变与不可变变量的核心差异与最佳实践。理解Kotlin变量用法的关键细节,提升开发效率,值得收藏。

Algorhythm的博客 1033

Kotlin 之 const

变量和常量 在kotlin语法中,修饰符var用来修饰可变变量,val修饰只读变量。关于val的只读属性而不是不可变属性,可以参考:val的只读属性 但是Kotlin同时又提供了一个const修饰符。在开发过程中,如果我们在伴生对象中定义了一个val类型的变量,那么Android Studio会智能的提示开发者需要使用const来修饰该变量。 const的特点 const只能修饰val,不能...

Android小菜比的博客 3841

Kotlin之const val、val以及@JvmField修饰字段

我们先看看kotlin官方文档的解释 val 声明一个只读属性(也称作只读变量)或局部变量 如果被声明的变量是方法内部的局部变量,可以称为常量 如果被声明变量是顶级变量,称为只读变量 const 将属性标记为编译期常量(编译期常量是在程序编译期会替换成字面量) 位于顶层或者是 object 声明 或 companion object 的一个成员 以 String 或原生类型值初始化 没有自定义 getter 我们通过代码一一理解一下 局部变量

rainbow的博客 740

Kotlin 可变变量var、不可变变量val、常量修饰const

可变变量var,不可变变量val val 不是常量,是一个不可变变量,因为var与val最本质的区别是val不能有setter方法 var age: Int = 10 val name: String = "zhangyu" //不可变变量 var name1: String = "zy" var name2: String? = null //类型String后面加上?表示可以为null fun main() { //name1 = name2!! //name2可以为null,所以不能直接.

张雨的博客 1008

Kotlin专题「二」:变量(var与val)、常量、注释

前言: 莫问良人长与短,从此山水不相逢。 一、概述   大家都知道 Kotlin 现在被 Gooogle 定为 Android 的官方开发语言。Kotlin 在项目中的使用将会越来越广泛,这也掀起了一波学习 Kotlin 的浪潮,作为一名 Android 开发者 Kotlin 是必须要掌握的。 Kotlin 是由 JetBrains 在2010 年推出的基于 JVM 的新编程语言,是一种新的静态类型编程语言。开发者称开发它的目的是避免 Java 语言中的一些难题。Kotlin 基于 JVM 的字节结构..

https://juejin.cn/user/1654096907477549/posts 5524

Kotlin声明常量(const)暨var 和 val 修饰的常量

https://www.jianshu.com/p/93b804e01d39

T的专栏 930

android studio val,Kotlin学习笔记之const val与val

const的使用const 必须修饰valconst 只允许在top-level级别和object中声明,使用方式如下:const val THOUSAND = 1000object myObject {const val constNameObject: String = "constNameObject"}class MyClass {companion object Factory {con...

weixin_34589862的博客 679

解释一下 Kotlin 的 var、val、const

昨天公众号后台收到一位小伙伴的留言询问,他对于 Kotlin 为何没有 Java 的 final 关键字感到困惑,这应该是很多初学者都会遇到的问题,所以我就写了这篇博文从更底层的角度来解析 Kotlin 声明变量时用到的三个关键字:var、val 和 const。 其实,Java 的 final 就等价于 Kotlin 的 val, 虽然通过 javap 反编译可以看到两者的底层实现不一样,但是从...

weixin_34101229的博客 392

android studio val,Kotlin之const val和val

const的使用const 必须修饰valconst 只允许在top-level级别和object中声明,使用方式如下:const val THOUSAND = 1000object myObject {const val constNameObject: String = "constNameObject"}class MyClass {companion object Factory {con...

weixin_29790897的博客 327
上一篇: Java实现回调(参考代码)
下一篇: Linux查看CPU、内存等DMI硬件信息
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值