带你踏入kotlin大门(二)|基本功_变量篇

简介: 本篇正式开启 kotlin 的学习历程,带你正式踏入 kotlin 大门。

前置知识

  • Java 编程基础

前言

前文为大家浅浅介绍了 kotlin 这一门语言,给大家讲述了 kotlin 这个新型基于 jvm 平台的语言的优势,以及我们 Android 开发者学习的必要性。话不多说,本篇正式开启 kotlin 的学习历程,带你正式踏入 kotlin 大门。

至于使用的编译工具,依旧是我们日常开发使用的 Android studio 或者 IDEA ,新建一个 kotlin 文件即可开启编码。或者可以使用 kotlin官方的 在线网站 来学习。

1.webp.jpg

(上述为在线网站截图,同时指出 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 中的 intlong 这里的首字母变成了大写。那是因为,kotlin 中不再有基本变量类型,全面转变为对象数据类型。下面给出对应的表格

1.webp.jpg

val 引用不可变

为什么 val 更准确的说法是 引用不可变 呢?

因为 val 的设计和 Java 中的 final 是一样的,不可变的是指引用的数据地址不可变,而非地址内的值不可变。如果这样子说,你依旧感到晦涩,可以查看下述的代码。

fun main() {
    val num = intArrayOf(1,2,3)
    num = intArrayOf(2,2,3)
}
复制代码

1.webp.jpg

上述代码中,我们直接修改 val 类型的变量,给这个变量赋予新的数组。会出现报错,告知我们 val 类型不可重复赋值。但当我们修改代码如下,会发现数组的内容是可以修改的。

fun main() {
    val num = intArrayOf(1,2,3)
//     num = intArrayOf(2,2,3)
  num[0] = 2
    println(num[0])
}
复制代码

1.webp.jpg

所以说,val 中不可变的是对变量的引用,而非变量本身的内容。

而出现这种现象的根本原因是底层数据设计的问题

我们知道,在 Java 中,final 修饰的基本数据类型是放在运行时常量池中,修饰的类信息是放在堆的方法区中,本质上他们都是放置于 堆内存 中。

相同的,val 的特性实现和 final 一样,它修饰的数组也是存储于 堆内存 中。所以也意味着只是引用不可改,但是引用的对象可改。

var 存在的意义

valkotlin 中默认推荐的修饰,我在这里也推荐你,优先使用 val 来声明一个变量。为什么呢?因为 val 是引用不可变,使用这种修饰,会是你的编程好习惯,它能避免你的变量在不知情的情况下被别人修改,这也就可以避免很多不必要的bug。同时,也建议你在使用 Java的时候,默认给变量都加上 final

val 那么好,那为啥 var 还要存在呢?

var 是表示某个变量可变,我们日常开发中,总会需要某个变量是可变的。否则,当我们要使某个数递增的时候,会变得异常困难。这就是它存在的道理。



相关文章
|
7天前
|
JavaScript Java Kotlin
Kotlin - 常量与变量
Kotlin - 常量与变量
|
13天前
|
JavaScript Java Kotlin
Kotlin - 常量与变量
Kotlin - 常量与变量
39 6
|
16天前
|
JavaScript Java Kotlin
Kotlin教程笔记(5) - 常量与变量
Kotlin教程笔记(5) - 常量与变量
39 2
|
27天前
|
JavaScript Java Kotlin
Kotlin开发笔记 - 常量与变量
Kotlin开发笔记 - 常量与变量
29 2
|
28天前
|
JavaScript Java Kotlin
|
27天前
|
JavaScript Java Kotlin
Kotlin语法 - 常量与变量
Kotlin语法 - 常量与变量
|
1月前
|
JavaScript Java 开发者
Kotlin - 常量与变量
本教程详细讲解了Kotlin语法,适合需要深入了解Kotlin的开发者。对于希望快速上手Kotlin的读者,建议查阅“简洁”系列教程。本文重点介绍了Kotlin中的常量与变量,包括运行时常量(val)、编译期常量(const val)以及变量(var),并探讨了它们在代码层面的区别和类型推导机制。
34 6
|
1月前
|
JavaScript Java Kotlin
Kotlin教程笔记(5) - 常量与变量
本教程详细解析了Kotlin中的常量与变量,包括运行时常量(val)和编译期常量(const val)的区别及应用,以及变量的定义与类型推导机制。适合希望深入了解Kotlin语法的学习者。
30 1
|
1月前
|
JavaScript Java Kotlin
Kotlin - 常量与变量
Kotlin - 常量与变量
15 1
|
1月前
|
JavaScript Java Kotlin
Kotlin - 常量与变量
Kotlin - 常量与变量
47 9

相关实验场景

更多