kotlin中const 和val的区别及使用场景分析

2025-04-08 04:50

本文主要是介绍kotlin中const 和val的区别及使用场景分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《kotlin中const和val的区别及使用场景分析》在Kotlin中,const和val都是用来声明常量的,但它们的使用场景和功能有所不同,下面给大家介绍kotlin中const和val的区别,...

kotlin中const 和val的区别

在 Kotlin 中,constval 都是用来声明常量的,但它们的使用场景和功能有所不同:

1. val:

  • val 用于声明只读变量,也就是不可修改的变量(类似于 Java 中的 final 变量)。
  • 它可以是任何类型,包括在运行时计算的值。
  • 你可以给 val 变量赋值一次,赋值后无法再修改它的值。
val pi = 3.14  // 运行时计算
val name = "Kotlinhttp://www.chinasem.cn"  // 运行时计算

2. const:

  • const 用于声明编译时常量。它必须在顶层或对象中声明,并且只能用于基本数据类型(如 IntDoubleString)。
  • constval一种特殊形式,它的值必须在编译时确定,而不是在运行时计算。
  • const 关键字通常用于常量的声明,它的值在整个应用程序的生命周期内是固定的。
const val LATEST_VERSION: Int = 4  // 编译时常量
const val PI: Double = 3.14159  // 编译时常量

主要区别:

  • 赋值时机
    • val 的值是在运行时确定的。
    • cpythononst 的值必须在编译时已知,且只能是基本数据类型或 String
  • 使用场景
    • val 可以用于任何类型,包括对象、集合、函数等。
    • const 只能用于常量值(基本数据类型或字符串),并且必须在类或对象外部声明,通常用于常量。
  • 总结:
    • 如果你需要声明常量并希望在编译时就确定其值,可以使用 cphponst
    • 如果你只是需要声明不可变的变量,可以使用 val

二 代码示例

1 java 代码

package test.f
const val LATEST_VERSION: Int = 4  // 编译时常量
const val PI: Double = 3.14159  // 编译时常量
class Test4 {
    val pi = 3.14  // 运行时计算
    val name = "Kotlin"  // 运行时计算
}

2 反编译kotlin代码

// Test4.java
package test.f;
import kotlin.Metadata;
import org.jetbrains.annotations.NotNull;
@Metadata(
   mv = {2, 0, 0},
   k = 1,
   xi = 48,
   d1 = {"\u0000\u001c\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0010\u000e\n\u0002\b\u0003\n\u0002\u0010\u0006\n\u0002\b\u0003\u0018China编程\u00002\u00020\u0001B\u0005\u0006\u0002\u0010\u0002R\u0014\u0010\u0003\u001a\u00020\u0004X\u0086D\u0006\b\n\u0000\u001a\u0004\b\u0005\u0010\u0006R\u0014\u0010\u0007\u001a\u00020\bX\u0086D\u0006\b\n\u0000\u001a\u0004\b\t\u0010\n\u0006\u000b"},
   d2 = {"Ltest/f/Test4;", "", "()V", "name", "", "getName", "()Ljava/lang/String;", "pi", "", "getPi", "()D", "untitled"}
)
public final class Test4 {
   private final double pi = 3.14;
   @NotNull
   private final String name = "Kotlin";
   public final double getPi() {
      return this.pi;
   }
   @NotNull
   public final String getName() {
      return this.name;
   }
}
// Test4Kt.java
package test.f;
import kotlin.Metadata;
@Metadata(
   mv = {2, 0, 0},
   k = 2,
   xi = 48,
   d1 = {"\u0000\u000e\n\uLyFofePK0000\n\u0002\u0010\b\n\u0000\n\u0002\u0010\u0006\n\u0000\"\u000e\u0010\u0000\u001a\u00020\u0001X\u0086T\u0006\u0002\n\u0000\"\u000e\u0010\u0002\u001a\u00020\u0003X\u0086T\u0006\u0002\n\u0000\u0006\u0004"},
   d2 = {"LATEST_VERSION", "", "PI", "", "untitled"}
)
public final class Test4Kt {
   public static final int LATEST_VERSION = 4;
   public static final double PI = 3.14159;
}

3 总结

val: 相当于java中的final ,运行时确定变量的值,值固定
const val 相当于java中 staic final,它的值在整个应用程序的生命周期内是固定的

到此这篇关于kotlin中const 和val的区别的文章就介绍到这了,更多相关kotlin const 和val区别内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于kotlin中const 和val的区别及使用场景分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154119

相关文章

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

使用Python构建智能BAT文件生成器的完美解决方案

《使用Python构建智能BAT文件生成器的完美解决方案》这篇文章主要为大家详细介绍了如何使用wxPython构建一个智能的BAT文件生成器,它不仅能够为Python脚本生成启动脚本,还提供了完整的文... 目录引言运行效果图项目背景与需求分析核心需求技术选型核心功能实现1. 数据库设计2. 界面布局设计3

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

MySQL 内存使用率常用分析语句

《MySQL内存使用率常用分析语句》用户整理了MySQL内存占用过高的分析方法,涵盖操作系统层确认及数据库层bufferpool、内存模块差值、线程状态、performance_schema性能数据... 目录一、 OS层二、 DB层1. 全局情况2. 内存占js用详情最近连续遇到mysql内存占用过高导致

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali