Kotlin语言基础(二)-变量和数据类型

2023-09-22 11:56:24

Kotlin语言基础-变量和数据类型

一、Kotlin的变量

Kotlin变量有两种形式var(variable)和val(value,取值)
val定义只读量,一旦创建,其值不会发生变化
例:

val a = 23

那么对于a对应的值就只能是23,不会发生变化。如何试图对a重新赋值都会导致编译错误。
var定义可变的变量,可以多次赋值修改变量的值。
例:

var b = 23
b=25

Kotlin语言中任何数据都是对象,因此对象都具有一个特定的数据类型。

二、数据类型

1.常见的数据类型

Short:短整型(16位)
Long:长整型(64位)
Int:整数(32位)
Double:双精度实数(64位)
Float:单精度实数(32位)
Byte:字节类型(8位)
Boolean:布尔类型(取值true或false)

在上述的类型中,表示常见的基本类型。
例如:

var a = 23

编译器会自动推断数据类型为Int

var b = 23.0

编译器会自动推断数据类型为Double
注意:var c:Int = null 是错误的。任何变量所属的类型后没有?表示非可空类型。
如果需要表示为可空类型,需要在数据类型后增加?,形如:
var c:Int? = null
这种定义c的变量才是正确的。

2. Any和Any?
任何一种非空类型的父类都是Any类型,Any类型表示成任何类型:
例如:

var d:Any = 23
d = true
d = 23.34

上述表示均为正确。

如果对于任何类型需要定义为可空类型,则可以表示为Any?类型,例:

var e:Any? = null
e = 23
e = false

3.Nothing
Nothing类型表示没有对象实例. 可以通过Nothing表示一个不存在的值。如果一个函数返回Nothing,这意味函数没有返回任何值(通常会抛出异常)。例:

fun doSomething():Nothing{
    throw NullPointerException("空指针")
}

有一种特殊的表示,如

var c = null

这时,编译器会将c解析成Nothing?可空的,实质上的含义是不表示任何实例对象,即表示不存在的实例对象。

4.可空类型的相关运算
(1)安全调用 ?.
如果一个对象为null,调用这个对象的方法会抛出空指针异常,导致运行出现问题。因此需要避免这种情况发生,利用安全调用可以先对对象进行判断,如果为空返回null,否则执行操作。例如:

var str:String? = null
println(str?.length)
str = "hello"
println(str?.length)

运行结果是:

null
5

(2)Elvis运算
Elvis运算符是?:
表达的意思是如果对象为null,则返回?:后面的表达式的结果;否则返回对象本身。
例如:

var str :String? = null
println(str?:"空字符串”)
str = "hello"
println(str?:"空字符串”)

运行结果是:

空字符串
hello

(3)非空断言运算
非空断言运算符是!!,它用于判断对象是否为null,如果是,抛出NullPointerException异常,否则执行后续的操作。例:

var str:String? = null
println(str!!.length)

运行结果是:

Exception in thread “main” java.lang.NullPointerException …

又如:

var str:String? = “hello”
println(str!!.length)

运行结果是:

5

参考文献:
陈轶《Android移动应用开发(微课版)》 清华大学出版社 ISBN 978-7-302-59734-6

更多推荐

【最新面试问题记录持续更新,java,kotlin,android,flutter】

最近找工作,复习了下java相关的知识。发现已经对很多概念模糊了。记录一下。部分是往年面试题重新整理,部分是自己面试遇到的问题。持续更新中~目录java相关1.面向对象设计原则2.面向对象的特征是什么3.重载和重写4.基本数据类型5.装箱和拆箱6.final有什么作用7.String是基本类型吗,可以被继承吗8.Str

vuepress+gitee免费搭建个人博客(无保留版)

文章目录最终效果,一睹为快!一、工具选型二、什么是VuePress三、准备工作3.1node安装3.2Git安装3.3Gitee账号注册四、搭建步骤4.1初始化VuePress4.2安装VuePress4.3初始化目录4.4编写文章五、部署到Gitee5.1创建仓库5.2个人空间地址设置4.3推送本地博客项目到Gite

linux如何查看各个文件夹大小

本文将介绍两种方法来查看Linux系统中文件夹的大小。方法一:使用du命令du命令是Linux系统中用于估算文件和目录容量的工具。通过du命令,可以查看文件夹的大小并按照目录层次结构进行排序。要查看文件夹的大小,可以按照以下语法使用du命令:du[选项][目录]其中,选项可以根据需要进行调整。一些常用的选项包括:-h:

使用JavaScript实现无限滚动的方法

前言在网页设计中,无限滚动是一种常见的交互方式,用户可持续地加载更多内容而无需刷新页面,提高用户体验。本文将介绍如何运用JavaScript实现无限滚动的效果,使网页能够自动加载更多数据,减轻用户加载新页的负担,为用户提供更好的访问体验。原理理解无限滚动的原理无限滚动的原理是当用户滚动到页面底部时,自动加载更多内容。这

计算机视觉的应用15-图片旋转验证码的角度计算模型的应用,解决旋转图片矫正问题

大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用15-图片旋转验证码的角度计算模型的应用,解决旋转图片矫正问题,在CV领域,图片旋转验证码的角度计算模型被广泛应用于解决旋转图片矫正问题,有效解决机器识别图片验证码的问题。旋转图片验证码常用于验证用户身份,但由于图片可能被以不同角度旋转,识别难度比较大。本文提出了

HTML+CSS+JavaScript 大学生网页设计制作作业实例代码 200套静态响应式前端网页模板(全网最全,建议收藏)

目录1.介绍2.这样的响应式页面这里有200套不同风格的1.介绍资源链接📚web前端期末大作业(200套)集合Web前端期末大作业通常是一个综合性的项目,旨在检验学生在HTML、CSS和JavaScript等前端技术方面的能力和理解。以下是一些可能的Web前端期末大作业的示例和介绍:网页类型举例📘响应式网站开发:学

【接口自动化测试】Eolink Apilkit 安装部署,支持 Windows、Mac、Linux 等系统

EolinkApikit有三种客户端,可以依据自己的情况选择。三种客户端的数据是共用的,因此可以随时切换不同的客户端。我们推荐使用新推出的ApikitPC客户端,PC端拥有线上产品所有的功能,并且针对本地测试、自动化测试以及使用体验等方面进行了强化,可以提供最佳的使用感受。建议对本地测试有需求的用户使用PC端,可满足更

全球公链进展| Metis 将成为完全去中心化的 L 2 网络;Circle在NEAR和Noble上推出原生 USDC

一周速览过去一周,明星项目动态如下:Gethv1.13.1修补程序已发布,修复区块生产等问题Metis计划年内成为完全去中心化的Layer2网络Sui主网已升级至V1.9.1版本Circle在NEAR和Noble上推出原生USDCPolygon发布关于2.0升级和POL代币迁移的三项提案CosmosHub已完成「Gai

权限提升数据库(基于MySQL的UDF,MOF,启动项提权)

获取数据库权限如何获取数据库的最高权限用户的密码,常用方法有这些网站存在高权限SQL注入点数据库的存储文件或备份文件网站应用源码中的数据库配置文件采用工具或脚本爆破网站存在高权限SQL注入点可以通过sqlmap拿到user表的账号密码,密码可能是MD5加密的。可以通过下面网站进行解密md5在线解密破解,md5解密加密(

Python自动化测试实战

接口自动化测试是指通过编写程序来模拟用户的行为,对接口进行自动化测试。Python是一种流行的编程语言,它在接口自动化测试中得到了广泛应用。下面详细介绍Python接口自动化测试实战。1、接口自动化测试框架在Python接口自动化测试中,我们可以使用很多开源的测试框架,例如unittest、pytest和nose等。这

JVM——9.对象的访问定位方式

前一篇文章,我们详细的了解了对象在堆内存中是如何分配的。现在,对象已经分配好了,那么要如何访问定位呢?下面,我们一起来了解一下。目录1.概述2.句柄法3.直接指针法4.小结1.概述创建对象是为了使用该对象,Java程序会通过栈上的reference数据来操作堆上的具体对象。由于reference类型在《Java虚拟机规

热文推荐