kotlin基本数据类型(Kotlin——数组)

2024-07-22 17:24:49 2

kotlin基本数据类型(Kotlin——数组)

本文目录

Kotlin——数组

Kotlin为数组增加了一个Array类。为元素是基本类型的数组增加了XxxArray类(其中Xxx可以是Byte、Short、Int等基本类型) Kotlin自己提供了一套集合体系,Kotlin的集合体系抛弃了Java集合体系中的Queue集合,Kotlin集合体系中增加了可变集合和不可变集合。

Kotlin的数组使用Array《T》来代表,Kotlin的数组就是一个Array类的实例,因此Kotlin数组是引用类型

访问数组是通过在数组的索引后跟一个为数组元素赋值,调用的其实就是set(index,value)方法

上面的两种方式本质是一样的,在经过编译器编译优化后,会转换成根据数组的内存地址来访问数组元素,性能不会有任何损失

所有的数组都有 size 属性,通过这个属性可以访问到数组的长度。

for-in 循环可以自动遍历数组的每个元素

对数组使用for-in循环会被编译成使用基于索引的循环,并不会创建迭代器。因此具有良好的性能

kotlin数组提供了一个indices属性,这个属性可返回数组的索引区间

这种通过索引区间遍历的实现具有更好的性能,kotlin将会在底层将其编译成根据内存地址来访问元素,不需要额外创建区间对象

Kotlin还为数组提供了一个lastIndex属性,该属性用于返回数组最后一个元素的索引,size-1 如果需要同时访问数组的索引和元素,可以使用数组的 withIndex() ,该方法返回一个Iterable对象,该对象的所有元素都是IndexedValue.

Swift VS Kotlin

Swift和Kotlin作为更加"现代化"的语言,毫无疑问提升了开发原生app的效率,二者旨在与Objective-C和Java互操作,方便"旧"应用的开发进行更新,如果你要从零开始编写一个全新的应用,不要犹豫,选择使用它们,尽情享受它们带来的乐趣。这两个语言有着许多相似之处,让我们来"欣赏"一下吧: Kotlin有一个称为数据类的东西,该类在编译时将获得诸如hashCode(),toString()和copy()等方法。可以这样定义: Swift没有数据类或任何等效类。 Swift具有元组功能,并且可以为元组设定类型别名; Kotlin具有Pair和Triple工具类,用于呈现2元和3元组对象,并且可以通过data class模拟自定义元组。 Swift Struct和Class之间的区别在于,结构体是值类型,而类是引用类型。可将元组视为隐式定义的Struct: Kotlin没有Struct类型。但是,我们可以通过copy函数创建一个新引用: 我们可以使用Kotlin数据类和Swift结构体来保存数据。即使一个是引用类型,另一个是值类型。 Swift和Kotlin都有枚举。但是声明和匹配方式有很大的区别: Kotlint通过密封类可以实现枚举。Kotlin的Sealed Class和Swift的Enum之间的唯一区别是,密封类是引用类型,而Swift的Enum是值类型: Swift还具有隐式解包功能,它定义了一个可选内容,但告诉编译器可以展开该内容,因为后面它将会被值。Kotlin也可以通过lateinit关键字执行相同的操作。需要注意的是,作为开发人员,应尽可能避免使用隐式解包方式。 协议和接口有相同的功能,只是使用了不同的术语。它们定义了一个类在实现接口时必须遵循的一组函数/变量。Kotlin允许在接口的定义中使用泛型,而Swift则可以通过定义关联类型associatedtype来实现。 高阶函数本质上是接受闭包或函数作为参数并返回新值或另一个函数的函数。使用高阶函数,我们可以对值(例如数组)进行转换,过滤和迭代。 参考:

Kotlin Model类在Json反序列化过程为空性探索

定义一个JsonModel类。

使用Gson类进行反序列化,Gson版本2.8.5

我们看一下反编译出来的Java类,省略不必要的部分。

Boolean类型和Int类型都被编译成了Java原始类型。

这里注意一下 :Kotlin的Boolean、Byte、Short、Int、Long、Float、Double声明为非空类型的时候,最终反编译出来的Java类都会变成对应Java中原始类型:boolean、byte、short、int、long、float、double。而原始类型是都有默认值的,不会为null。

接下来开始探索:

完整的json字符串

如果反序列化的Json字符串没有 show 字段和 number 字段,那么最后反序列化出来的JsonModel对象, show = false , number = 0 。

ReflectiveTypeAdapterFactory.Adapter的read方法。

注释1处,循环判断是否还有下一个值需要处理。处理完string字段以后,json字符串中就没有其他要处理的字段了,也就是说,在Json字符串没有 show 字段和 number 字段的时候,根本不会处理这两个字段,所以都是默认值, show = false , number = 0 。

如果反序列化的Json字符串 show 字段和 number 字段都为 null ,那么最后反序列化出来的JsonModel对象, show = false , number = 0 。

ReflectiveTypeAdapterFactory.Adapter的read方法的注释2处,使用BoundField读取字段。

注释1处,如果是boolean类型,对应的变量是TypeAdapters.BOOLEAN,如果值为null的话,TypeAdapters.BOOLEAN返回的值是null。如果是int类型,对应的变量是TypeAdapters.INTEGER,如果值为null的话,TypeAdapters.INTEGER返回的值是null。

注释2处,条件不满足,所以Java原始类型变量如果对应的json字符串为null的话,最终反序列化的结果就是默认值, show = false , number = 0 。

注释1处,boolean类型变量,如果从json字符串中读取的值是null,返回null

int类型的适配器同理,如果从json字符串中读取的值是null,返回null,那么int类型的变量默认值就是0。

如果反序列化的Json字符串 string 字段缺失,那么在反序列化过程中就不会处理 string 字段,那么 string 字段就是默认值,在这个例子中我们没有给 string 字段赋默认值,所以默认值就是null,那么最后反序列化出来的JsonModel对象, string = null 。

注意: 注意: 注意:

如果我们如下所示,声明JsonModel类,给string字段默认赋值为"你好呀"。

反编译后的Java类,省略无关部分。

我们看到,JsonModel类没有默认的 无参构造函数 。并且只有当调用JsonModel三个参数的构造函数的时候,才会给string字段赋值。

当反序列化的Json字符串 string 字段缺失,反序列化后string字段会默认是"你好呀"吗?并不是。Gson在反序列化过程中要么通过调用 无参构造函数 来构造对象,或者通过 UnsafeAllocator 类,在不调用构造函数的情况下地分配对象。

所以如上声明方式,即使给string字段默认赋值为"你好呀"。在Json字符串string字段缺失的情况下,反序列化之后,string字段值依然为null。这里一定要注意!!!

如果反序列化的Json字符串 string 字段为 null ,那么最后反序列化出来的JsonModel对象, string = null 。

TypeAdapters.STRING

注释1处,值为null,返回null。

也就是说,对于一个引用类型的变量,如果Json字符串中该变量对应的值为null,那么反序列化出来的引用类型变量的值就是null。注意:并且会覆盖该变量的默认值。在这个例子中,我们如果在声明的时候为 string 字符指定一个默认值,但是当 json 字符串中 string 字段对应的值为 null 的时候,最后序列化出来的结果仍然为 null 。

所以正确的做法是把引用类型的变量声明为可空类型。如下所示:

反编译出来的Java类,对应的原始类型都变成了相应的包装类,默认值都是null。所以使用的时候要注意判断是否为null。

这种声明类型是不合适的,将可以不为null的Java基本数据类型,变为了可空的包装类型,使用的时候会增加空判断的逻辑。

kotlin基本数据类型(Kotlin——数组)

本文编辑:admin

更多文章:


指针函数和函数指针(感觉c++函数,指针太难,想先学python,不知各位大佬怎么看)

指针函数和函数指针(感觉c++函数,指针太难,想先学python,不知各位大佬怎么看)

本文目录感觉c++函数,指针太难,想先学python,不知各位大佬怎么看C语言中指针问题感觉c++函数,指针太难,想先学python,不知各位大佬怎么看作为一名IT行业的从业者,同时也在使用Python从事机器学习方面的开发,所以我来回答一

2023年5月15日 13:40

webgl和canvas性能比较(canvas动画性能好还是纯js动画性能好)

webgl和canvas性能比较(canvas动画性能好还是纯js动画性能好)

本文目录canvas动画性能好还是纯js动画性能好cocos creator 使用webgl和canvas的区别canvas的性能真的可以用来做游戏吗canvas动画性能好还是纯js动画性能好网页分几种方式实现动画1、CSS动画,由浏览器渲

2024年6月6日 12:34

windows10菜单栏隐藏(win10怎么隐藏任务栏)

windows10菜单栏隐藏(win10怎么隐藏任务栏)

本文目录win10怎么隐藏任务栏win10系统怎样把桌面底侧的工具栏隐藏win10怎么隐藏任务栏图标怎么把win10桌面任务栏隐藏教你win10怎么隐藏任务栏win10系统如何隐藏任务栏u盘图标win10菜单栏右下角“显示桌面”按钮怎么隐藏

2024年6月21日 06:06

05网英语课课练答案(六年级英语课课练答案第90页和第91页的下册答案零五网)

05网英语课课练答案(六年级英语课课练答案第90页和第91页的下册答案零五网)

本文目录六年级英语课课练答案第90页和第91页的下册答案零五网零五网泽林版英语课课练五年级下册答案八年级英语课课练强化拓展答案零五网零五网八年级下册英语课课练答案译林版unit3答案和unit4答案零五网六年级上册英语课课练69业到70页答

2024年5月1日 04:19

python判断变量是否存在(当变量值等于6时,如何利用python表达式判断出变量是否在(1,20)区间内)

python判断变量是否存在(当变量值等于6时,如何利用python表达式判断出变量是否在(1,20)区间内)

本文目录当变量值等于6时,如何利用python表达式判断出变量是否在(1,20)区间内python 判断变量是否定义python 判断某个文件/文件夹是否存在python中判断变量是否存在python检验变量是否内生python中导入一个A

2024年7月18日 08:15

create table(CREATE TABLE解释)

create table(CREATE TABLE解释)

本文目录CREATE TABLE解释ACCESS中怎么用Creat Table 创建表,在那可以建立mysql中的create table语句可以创建一个create的CREATE TABLE函数SQL语言create table怎么用cr

2024年7月11日 02:41

nginx负载均衡不生效(Nginx+SpringMVC 负载均衡中遇到的坑)

nginx负载均衡不生效(Nginx+SpringMVC 负载均衡中遇到的坑)

大家好,今天小编来为大家解答以下的问题,关于nginx负载均衡不生效,Nginx+SpringMVC 负载均衡中遇到的坑这个很多人还不知道,现在让我们一起来看看吧!本文目录Nginx+SpringMVC 负载均衡中遇到的坑linux下 ng

2024年7月27日 01:50

sql server安装介质(SQL server2008安装介质上文件的长路径名称不适用,求大神指点)

sql server安装介质(SQL server2008安装介质上文件的长路径名称不适用,求大神指点)

这篇文章给大家聊聊关于sql server安装介质,以及SQL server2008安装介质上文件的长路径名称不适用,求大神指点对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录SQL server2008安装介质上文件的长路径

2024年7月14日 20:50

arrow fest(wall flange什么意思)

arrow fest(wall flange什么意思)

本文目录wall flange什么意思我要The Kinks的资料wall flange什么意思wall flange墙凸缘wall英 n.墙; 屏障; 隔阂; 壁垒vt.& vi.筑墙围住,用墙隔开; 围以墙adj.墙壁的复数: wall

2024年6月20日 16:23

电脑bat代码大全(高手帮忙写段bat代码)

电脑bat代码大全(高手帮忙写段bat代码)

本文目录高手帮忙写段bat代码让电脑蓝屏的bat代码如何写高手帮忙写段bat代码@echo off:5echo 输入1运行1.batecho 输入2运行2.batecho 输入3运行3.batset /p a=请输入:if /i "%

2024年6月4日 00:34

当前许可不支持影像服务器(安装solidworks2005时得到不了许可证 许可服务器不支持(-18,147,0)怎么办)

当前许可不支持影像服务器(安装solidworks2005时得到不了许可证 许可服务器不支持(-18,147,0)怎么办)

大家好,如果您还对当前许可不支持影像服务器不太了解,没有关系,今天就由本站为大家分享当前许可不支持影像服务器的知识,包括安装solidworks2005时得到不了许可证 许可服务器不支持(-18,147,0)怎么办的问题都会给大家分析到,还

2024年8月12日 06:46

希望我的建议有用的英文(希望我的建议对你有所帮助用英语怎么说)

希望我的建议有用的英文(希望我的建议对你有所帮助用英语怎么说)

本文目录希望我的建议对你有所帮助用英语怎么说翻译成英语:希望我的建议对你来说是有用的我想为我们的城市做一点贡献 希望我的建议能被采纳 用英语怎么说 谢谢希望我的建议可以帮助到你!的英文翻译.我希望这条建议对你有帮助 翻译成英文求“希望我的建

2024年7月9日 14:24

c语言移位操作(单片机 移位操作 右移 C语言)

c语言移位操作(单片机 移位操作 右移 C语言)

大家好,关于c语言移位操作很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于单片机 移位操作 右移 C语言的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录

2024年7月20日 23:25

objective lens di 20x(2016职称英语词汇O开头:objective是什么意思及用法)

objective lens di 20x(2016职称英语词汇O开头:objective是什么意思及用法)

本文目录2016职称英语词汇O开头:objective是什么意思及用法objective什么意思词汇精选:objective的用法和辨析请教一下indifferent和objective的区别,非常感谢!2016职称英语词汇O开头:obje

2024年7月23日 00:49

工作流程范文(饭店工作流程怎么写)

工作流程范文(饭店工作流程怎么写)

本文目录饭店工作流程怎么写一天的工作流程怎么写工作流程应该怎么写业务工作流程怎么写饭店工作流程怎么写摘要1、准时到岗,参加班前会,接受领班和经理对当餐的工作按排和布置。2、员工进岗后,做卫生定位摆台,如提前预订应按要求摆台。3、清理地面卫生

2024年7月14日 10:56

随机数字表的使用效率改进(excel表怎么设置随机数里面合格率控制在90%)

随机数字表的使用效率改进(excel表怎么设置随机数里面合格率控制在90%)

本文目录excel表怎么设置随机数里面合格率控制在90%单因素完全随机设计的方差分析有哪些类型,各自的方差分析如何进行抽样不随机但分组随机是什么类型的实验,比如用了便利抽样,但用随机数字表进行随机分组求 实验性研究 备课笔记,速~~!!e

2024年6月28日 19:08

夫唱妇随是褒义词还是贬义词(夫唱妇随什么意思有什么典故)

夫唱妇随是褒义词还是贬义词(夫唱妇随什么意思有什么典故)

本文目录夫唱妇随什么意思有什么典故夫唱妇随是什么意思夫唱妇随什么意思有什么典故 【典故出处】:《关尹子 三极》:「天下之理,夫者唱,妇者随。」 【成语意思】:唱:原为「倡」;即倡议;提出某种意见。丈夫说什么;妻子也跟着说什么。是封建

2024年5月17日 08:12

primary翻译(primary的中文意思是什么 primary的中文翻译)

primary翻译(primary的中文意思是什么 primary的中文翻译)

本篇文章给大家谈谈primary翻译,以及primary的中文意思是什么 primary的中文翻译对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本

2024年8月1日 14:10

不能恋爱的秘密(有什么秘密打死都不能告诉女朋友的)

不能恋爱的秘密(有什么秘密打死都不能告诉女朋友的)

本文目录有什么秘密打死都不能告诉女朋友的不能恋爱的秘密第几集知道真相有什么秘密打死都不能告诉女朋友的当时做事的时侯,是个正常人完全能够做的很好,由于当时脑筋一时短路,自己缺做的一塌糊涂,并且还产生了大笑话。像这类的秘密打死也不能告诉女朋友以

2024年7月6日 02:57

大于等于 怎么输入(计算机大于等于号怎么输入)

大于等于 怎么输入(计算机大于等于号怎么输入)

本文目录计算机大于等于号怎么输入电脑键盘上怎么输入大于等于,小于符号 怎么输入在Word里面大于等于符号怎样输入计算机大于等于号怎么输入电脑键盘上怎么输入大于等于,小于符号 怎么输入输入方法如下:1,通过输入法智能匹配的词找到大于等于号,以

2024年7月13日 20:28

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1730
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1155
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1152
标签列表

热门搜索