带你踏入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 是表示某个变量可变,我们日常开发中,总会需要某个变量是可变的。否则,当我们要使某个数递增的时候,会变得异常困难。这就是它存在的道理。



相关文章
|
8月前
|
Java 编译器 Kotlin
Kotlin 中变量,类型,表达式,函数详解
Kotlin 中变量,类型,表达式,函数详解
68 0
|
11月前
|
安全 Java 编译器
02. Kotlin 变量、常量和类型
02. Kotlin 变量、常量和类型
105 0
|
安全 Java 大数据
带你踏入Kotlin大门(一)|kotlin初识
作为一名 Java 使用者,相信大家对 Java 的各种规范已经深入了解,这些规范是一种行业标准,它使得 Java 具有了更好的兼容性。但随着函数式编程的兴盛,这些规范又开始束缚了开发者的创造,成为了拖累 Java 的因素。
|
Java API Kotlin
带你踏入kotlin大门(三)|基本功_函数篇
本文给讲述 kotlin 中的 头等公民 ,函数。
带你踏入kotlin大门(三)|基本功_函数篇
|
设计模式 Java Kotlin
带你踏入kotlin大门(四)|基本功_逻辑控制篇
本系列的上一篇文章中,笔者给大家讲述 kotlin 中的 头等公民 ——函数,相信 Kotlin 中函数的简单使用大家都很熟悉了,现在继续给大家讲述 Kotlin 中的逻辑控制语句。
带你踏入kotlin大门(四)|基本功_逻辑控制篇
|
设计模式 Java 开发者
带你踏入kotlin大门(五)|基本功_类和继承篇
本篇作为 Kotlin 基本功的倒数第二篇,将为大家带来关于 Kotlin 中类和继承的知识。如果你看到这篇文章的时候,还未听说过 Kotlin 或者从未学习过 Kotlin ,你可以点击链接从本系列的第一篇文章开始学习。
带你踏入kotlin大门(五)|基本功_类和继承篇
|
设计模式 安全 Java
带你踏入Kotlin大门(六)|基本功_接口和特殊类篇
这篇文章是我们 Kotlin 基础章系列的最后一文了,前面我们利用了5篇文章讲解了 Java 开发者如何学好 Kotlin 的基本用法,每篇文章的篇幅都不长,可以在空余时间快速阅读,笔者希望学习完前五篇,再来学习这最后一篇文章,会更加的容易理解。
|
Java 编译器 Kotlin
【Kotlin 初学者】变量-常量-数据类型
变量 var 关键字 val 关键字 内置数据类型(常用) Kotlin的引用类型 类型推断 延迟初始化lateinit 使用lateinit关键字 添加islnitialized检查 惰性初始化by lazy 正常执行 String 模板 自动补全(输出)
156 0
【Kotlin 初学者】变量-常量-数据类型
|
Java Android开发 图形学
Android修行手册之Kotlin-【变量和常量】、【基础类型】、【字符串】篇
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣!!!
186 0
|
Java Kotlin
【Kotlin】变量简介 ( 可空类型 | lateinit | 初始化判定 | 非空类型 | !! 与 ? 修饰符 | ?= ?. ?: 运算符 | 抽象属性变量)(二)
【Kotlin】变量简介 ( 可空类型 | lateinit | 初始化判定 | 非空类型 | !! 与 ? 修饰符 | ?= ?. ?: 运算符 | 抽象属性变量)(二)
190 0