KotlinKotlin精讲-黑马程序员(原创)Kotlin编程

kotlin精讲-第2章(3)val和var

2017-11-30  本文已影响324人  739c8d412b4c

难度指数:★★☆☆☆
收获指数:★★★☆☆

什么是变量?变量就是内容可以改变的量。Kotlin的变量分为“可变变量”和“不可变变量”两种类型。

可变变量通过var(来自variable)关键字进行声明,不可变变量通过val(来自value)进行声明。

可变变量:变量可以进行多次修改,对应java中的普通变量(非final变量)。

不可变变量:变量只能进行一次初始化,对应java中的final类型的变量。

【Kotlin相比于Java,不可变类型的变量只需要用val修饰即可,而不需要使用public static final修饰,是不是减少了一些代码呢?】

如果一个变量只是声明,需要约束变量的具体类型:

参考如下代码:

image.png

针对以上代码,如果我们放开第6行注释,就会提示如下错误:

image.png

提示“This variable musteither have a type annotation or be initialized”,也就是“这个变量要么有类型申明,要么被初始化”。因为如果一个变量只申明不赋值,不约束变量具体类型是不允许的。

Kotlin中变量不能重复定义:

假设我们有如下代码:

image.png

针对以上代码,如果我们放开第4行的注释,会有如下的编译提示,参考截图:


image.png

IDEA提示“Conflicting declarations:var a:String ,var a:String”,也就是“变量a和变量a定义冲突”。

变量声明有多种形式

我们可以只声明变量不赋值变量,可以声明变量的同时赋值变量,可以声明变量和赋值变量分开。参考如下代码:

image.png

变量类型支持自动推断

如果在声明变量的同时赋值了变量,那么我们可以省去变量类型,因为编译器有足够信息可以推断出变量的类型是什么,参考如下代码:

image.png

变量a和变量b的类型都没有指定,都可以编译通过。

不可变类型变量进行二次赋值会提示错误。

如果变量类型是不可变类型,那么只能赋值一次,如果进行第二次赋值,则会提示错误,参考代码:

image.png

针对以上代码,如果我们放开第16行的注释,则会出现如下的编译错误,参考截图:

image.png

编译器提示“Val cannot bereassigned”也就是“Val类型变量,也就是不可变类型变量,不能被二次赋值”。

val变量优先

val变量和var变量我们在开发过程中怎么去选择呢?只要可能,我们在开发中可以记住一个原则“val类型变量优先”,也就是我们首先使用val不变值。

val类型变量和var类型变量字节码区别

我们知道,val变量只能被赋值一次,那就类似Java语言中的final关键字修饰的变量。Kotlin中val关键字修饰的变量,是否会被转换成Java里面的final关键字修饰的变量呢?我们可以通过查看编译转换的字节码文件。

怎么查看Kotlin代码编译之后的字节码文件呢?比如,我们想查看如下代码的字节码文件:

image.png

双击两下Shift按键,调出“Search EveryWhere窗口”,然后输入“ShowBytecode”

image.png

点击进入,然后看到如下结果:

image.png

不过,字节码文件不通过单独的学习,我们没法看懂。我们可以把字节码文件转成java文件去看,接着我们点击“Decompile”按钮:

image.png

看到如下结果,参考截图:

image.png

可以看到,val类型的成员变量a,转换为Java代码的时候,被添加上了final关键字。

看字节码的过程,给大家做个gif

show kotin byte (2).gif
上一篇 下一篇

猜你喜欢

热点阅读