继续创造,加速生长!这是我参加「日新方案 10 月更文应战」的第10天,点击检查活动概况
带你踏入Kotlin大门(一)|kotlin初识 – ()
带你踏入kotlin大门(二)|根本功_变量篇 – ()
带你踏入kotlin大门(三)|根本功_函数篇 – ()
带你踏入kotlin大门(四)|根本功_逻辑控制篇 – ()
带你踏入kotlin大门(五)|根本功_类和承继篇 – ()
带你踏入Kotlin大门(六)|根本功_接口和特别类篇 – ()
前置知识
- 有
Java
编程根底
前语
前文为咱们浅浅介绍了 kotlin
这一门言语,给咱们讲述了 kotlin
这个新型根据 jvm
渠道的言语的优势,以及咱们 Android 开发者学习的必要性。话不多说,本篇正式敞开 kotlin
的学习进程,带你正式踏入 kotlin
大门。
至于运用的编译东西,仍旧是咱们日常开发运用的 Android studio 或许 IDEA ,新建一个 kotlin 文件即可敞开编码。或许能够运用 kotlin官方的 在线网站 来学习。
(上述为在线网站截图,一起指出 main
函数怎么写)
本篇文章,先带咱们学习 kotlin
中的 变量
不一样的变量
类型声明
关于类型声明,咱们在 Java
中会经常用到,便是咱们在定义变量的时候,在变量名之前要写的声明。
//java
String stringValue = "abc";
int intValue = 1;
Long longValue = 1234;
上述 Java
代码的变量声明,换到 kotlin
中是这姿态的。
//kotlin
var stringValue = "abc"
var intValue = 1
var longValue = 1234
在 kotlin
中,咱们的变量类型声明变成了运用 var
或许 val
来进行声明,一起每一行末尾不再运用分号
其中,var
全称是 variable ,意思为可变。其意思正是 可变变量 ,对应于 Java
中的非 final
类型。
val
全称是 value ,更精准的释义应该是:引证不行变,对应于 Java
中的 final
类型。
咱们先来以 var
为例子学习 kotlin
中的变量,val
类型稍后再说。
咱们关于上述的 kotlin
代码或许会有疑惑,为何 kotlin
能够不做类型声明呢,莫非它能自己知道我要的是什么类型的变量么?
是的,kotlin
大部分情况下能够知道你要声明的是什么类型的变量,这是得益于它的 类型推导 机制。当咱们在变量后面写了表达式或许对应的值时,咱们能够不用声明变量的类型,让编译器主动推导类型。
那当咱们偏要声明变量类型,或许咱们未赋值时候,怎么声明变量呢?
在 kotlin
中,类型声明是运用 <name>:<object>
这种类型来声明的,咱们继续运用上述的demo。
//偏要声明
var stringValue:String = "abc"
var intValue:Int = 1
var longValue:Long = 1234
//无法类型推导,必须做类型声明
var stringValue:String
var intValue:Int
var longValue:Long
咱们会发现 Java
中的 int
和 long
这儿的首字母变成了大写。那是由于,kotlin
中不再有根本变量类型,全面转变为目标数据类型。下面给出对应的表格
val 引证不行变
为什么 val
更准确的说法是 引证不行变 呢?
由于 val
的规划和 Java
中的 final
是一样的,不行变的是指引证的数据地址不行变,而非地址内的值不行变。如果这姿态说,你仍旧感到晦涩,能够检查下述的代码。
fun main() {
val num = intArrayOf(1,2,3)
num = intArrayOf(2,2,3)
}
上述代码中,咱们直接修正 val
类型的变量,给这个变量赋予新的数组。会呈现报错,告知咱们 val
类型不行重复赋值。但当咱们修正代码如下,会发现数组的内容是能够修正的。
fun main() {
val num = intArrayOf(1,2,3)
// num = intArrayOf(2,2,3)
num[0] = 2
println(num[0])
}
所以说,val 中不行变的是对变量的引证,而非变量本身的内容。
而呈现这种现象的根本原因是底层数据规划的问题。
咱们知道,在 Java
中,final
润饰的根本数据类型是放在运行时常量池中,润饰的类信息是放在堆的办法区中,本质上他们都是放置于 堆内存 中。
相同的,val
的特性实现和 final
一样,它润饰的数组也是存储于 堆内存 中。所以也意味着只是引证不行改,但是引证的目标可改。
var 存在的含义
val
是 kotlin
中默认推荐的润饰,我在这儿也推荐你,优先运用 val
来声明一个变量。为什么呢?由于 val
是引证不行变,运用这种润饰,会是你的编程好习惯,它能防止你的变量在不知情的情况下被别人修正,这也就能够防止很多不必要的bug。一起,也主张你在运用 Java的时候,默认给变量都加上 final
。
val 那么好,那为啥 var 还要存在呢?
var 是表示某个变量可变,咱们日常开发中,总会需求某个变量是可变的。否则,当咱们要使某个数递增的时候,会变得异常困难。这便是它存在的道理。
参阅
从内存视点理解static与final关键字 – 简书 (jianshu.com)
《kotlin中心编程》
《第一行代码》(第三版)