zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【Kotlin】Kotlin 变量与常量 ( 变量声明 | 只读变量 | 类型推断 | 编译时常量 | Kotlin 字节码查看面板 | Kotlin 引用数据类型 )

Kotlin字节变量 查看 类型 编译 数据类型 引用
2023-06-13 09:18:06 时间

文章目录

一、变量声明


变量声明格式 :

变量定义关键字 变量名 : 变量类型 = 变量值

实际示例 :

var number : Int = 0
  • 变量定义关键字 : var
  • 变量名 : number
  • 变量类型 : Int
  • 赋值运算符 : =
  • 变量值 : 0

代码示例 :

fun main() {
    var number: Int = 0
    println(number)
}

执行结果 :

二、只读变量


使用 var 关键字 , 可以 声明一个可修改的变量 ;

使用 val 关键字 , 可以 声明一个只读变量 , 该变量第一次赋值后 , 不允许修改 ;

如果一个 var 类型的可修改变量 , 再初次赋值后 , 在整个生命周期内没有进行修改 , Kotlin 会建议将该变量使用 val 进行修饰 ;

提示如下信息 :

Variable is never modified and can be declared immutable using 'val' 

var number: Int = 0 修改为 val number: Int = 0 后 , 也就是将 可修改变量 修改为 只读变量 , 执行结果如下 :

三、类型推断


声明变量时 并指定了变量的具体类型 , 如果对变量再进行赋值 , 会提示

Explicitly given type is redundant here 

警告信息 , 下图中 val number: Int = 0 代码中的 Int 类型是灰色的 , 说明该声明是没必要的 ;

选择 " Remove explicit type specification " 移除显示的类型声明 选项 , 可以将 Int 类型声明移除 ;

最终代码如下 :

fun main() {
    val number = 0
    println(number)
}

执行结果 : 此时代码没有任何警告 , 是 Kotlin 官方推荐的代码 ;

四、编译时常量


编译时常量 是在 编译阶段 进行赋值的 ;

函数 在 编译时不会被调用 , 在运行时才会调用 , 因此 编译时常量 必须在 函数之外 进行声明和赋值 ;

编译时常量 类型 : 编译时常量只能是如下几个基本数据类型 , 不能是其它类型 ;

  • Boolean
  • Char
  • Byte
  • Short
  • Int
  • Long
  • Float
  • Double
  • String

编译时常量 声明格式 :

const val 常量名 = 常量值

代码示例 :

const val COUNT = 100

fun main() {
    val number = COUNT
    println(number)
}

执行结果 :

五、Kotlin 字节码查看面板


在上一个章节 , 使用 const val COUNT = 100 代码定义了一个编译时 常量 , 下面通过分析 Kotlin 字节码数据 , 分析该编译时常量信息 ;

连按两下 Shift 键 , 弹出搜索框 ,

在搜索框中搜索 " Show Kotlin ByteCode " , 然后进入到该选项 ,

此时 , 在右侧就会同时显示该 Kotlin 文件的字节码信息 , const val COUNT = 100 对应的字节码信息是 public final static I COUNT = 100 ;

六、Kotlin 引用数据类型


Java 中存在 基本数据类型 与 引用类型 ,

  • 基本数据类型 存放在 栈内存 中 ;
  • 引用类型 存放在 堆内存 中 ;

在 Kotlin 中 , 只有 引用数据类型 , 没有 基本数据类型 ;

在编译时 , 编译器 会将 Kotlin 中与 Java 基本数据类型相对应 的类型 自动转为 基本数据类型 , 这样可以提高执行效率 ;

如下图中 , Kotlin 中的 val number: Int = COUNT 只读变量 是 Kotlin 中的 Int 引用类型 , 但是在 字节码文件中 , 对应的字节码为 LOCALVARIABLE number I L1 L6 0 , 其中 I 表示 Java 中的 基本数据类型 int ;