Kotlin快速入门系列2

Kotlin的基本数据类型

Kotlin 的基本数值类型包括 Byte、Short、Int、Long、Float、Double 等。不同于 Java 的是,字符不属于数值类型,是一个独立的数据类型。

Java和kotlin数据类型对照如下:

Java基本数据类型

Kotlin对象数据类型

数据类型说明

int

Int

整型

long

Long

长整形

short

Short

短整型

float

Float

单精度浮点型

double

Double

双精度浮点型

boolean

Boolean

布尔型

char

Char

字符型

byte

Byte

字节型

从表中不难看出,相同的数据类型,Kotlin的首字母都是大写,而Java的首字母都是小写,这一个小小的差别表示Kotlin完全抛弃了Java中的基本数据类型,全部使用了对象数据类型。比如在Java中int是关键字,Kotlin中Int则变成了一个类,有自己的方法和继承结构。可以这样理解,Kotlin 中没有基础数据类型,只有封装的数据类型,每定义的一个变量,其实是Kotlin 封装了一个对象,这样可以保证使用不会出现空指针。数据类型也是一样,所以在比较两个数字的时候,就有比较数据大小和比较两个对象是否相同的区别了。

Kotlin三个等号 === 表示比较对象地址两个 == 表示判断两个数值是否相等

如下述例子:

val a: Int = 10000
println(a === a) // true,值相等,对象地址相等

//这里经过了装箱操作,创建了两个不同的对象
val showNumA: Int? = a
val showNumB: Int? = a

//虽然经过了装箱操作,但是值是相等的,都是100
println(showNumA === showNumB) //  false,值相等,对象地址不一样
println(showNumA == showNumB) // true,值相等

运行后对应控制台输出结果为:

这里值得注意一点,如果你要拿这段代码去运行验证,要注意,a变量赋值的大小规则跟 Java 中是一样的,在范围是 [-128, 127] 之间并不会创建新的对象,输出的结果都是 true,从 128 开始,输出的结果才为 false。

类型转换

在kotlin中,较小数据类型并不是较大数据类型的子类型,较小的数据类型不能隐式转换为较大的数据类型。 比如在不进行显式转换的情况下,我们不能把 Int 型值赋给一个 Long 变量。但我们可以使用其toLong()方法。

val b: Int = 1
val i: Long = b.toLong()

如此,便达成了数据类型转换的目的,当然,kotlin中每种数据类型都有这种转化成其他类型的方法:

toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char

kotlin在某些场景下,也可以使用自动类型转化,但前提是相应逻辑可以根据上下文环境推断出正确数据类型,并且操作符能做相应的重载操作。如:

val longNum = 1 + 1L  // Int类型+Long类型=Long类型

位操作

与Java类似,对于Int和Long类型还有一系列位操作符可使用,如下:

shl(bits) – 左移位 (Java’s <<)
shr(bits) – 右移位 (Java’s >>)
ushr(bits) – 无符号右移位 (Java’s >>>)
and(bits) – 与
or(bits) – 或
xor(bits) – 异或
inv() – 反向

使用场景较少,这里不做赘述。

字符

Kotlin和Java不一样,Char 不能直接和数字操作。Char 必需是单引号 ' 包含起来的。比如普通字符 '0','a'。

字符字面值用单引号括起来表示, 而特殊字符可以用反斜杠转义。转义序列如下:\t、 \b、\n、\r、\'、\"、\\ 和 \$。

字符串

和 Java 一样,String 不可变。同时,Kotlin 支持三个引号 """ 扩起来的字符串,支持多行字符串。例如:

fun main(){
    val text = """
1234567
七六五四三二一
示例
"""
    println(text)
}

对应控制台输出为:

String对象可以通过 trimMargin() 方法来删除多余的空白,我们可以修改刚刚的代码来进行验证:

fun main(){
    val text = """
|1234567
|七六五四三二一
|示例
""".trimMargin()
    println(text)
}

对应输出控制台结果为:

如果你细心点,会发现,我在转行的字符串前都加上了|,这是因为trimMargin()中默认 | 用作边界前缀,但你也可以选择其他字符并作为参数传入,比如 trimMargin(">")。(此方法对应源码如下:)

数组

kotlin中,数组用类 Array 来实现,跟Java类似,常用的 size 属性及 get 和 set 方法使用方法一致,包括通过下标来获取或者设置数组对应位置的值。

与之对应,数组有两种创建方式:

  1. 使用函数arrayOf();
  2. 使用工厂函数。
val arrayOne = arrayOf(1, 2, 3)        //[1,2,3]
val arrayTwo = Array(3, { i -> (i * 2) })        //[0,2,4]

//读取数组
println(arrayOne[0])
println(arrayTwo[1])

对应输出为:

  1. 除了类Array,还有ByteArray, ShortArray, IntArray,用来表示各个类型的数组,用法同Array。

字符串模板 

在kotlin中,字符串可以包含一些小段代码(即模板表达式),来进行求值并把结果合并到字符串中。此处模板表达式以美元符($)开头,由变量名共同构成:

fun main(){
    val num = 111
    val va = "num = $num" 
    println(va)     // 打印结果为 "num = 111"
}

或者用花括号扩起来表示的任意表达式:

fun main(){
    val str = "kotlin"
    val strShow = "$str.length is ${str.length}"
    println(strShow) // 打印结果为 "kotlin.length is 6"
}

但同时,如果你需要使用$字符的话,你可以使用下列方法:

fun main(){。
    val str = """
这个符号 ${'$'} 是美元符号
"""
    println(str)
}

对应控制台输出结果为:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/351844.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3+naiveUI二次封装的v-model 联动输入框

根据官网说明使用 源码 <template><div class"clw-input pt-3"><n-inputref"input":value"modelValue":type"type":title"title"clearable:disabled"disabled":size"size"placeholder&…

商家转账到零钱使用教程

商家转账到零钱是什么&#xff1f; 使用商家转账到零钱这个功能&#xff0c;可以让商户同时向多个用户的零钱转账。商户可以使用这个功能用于费用报销、员工福利发放、合作伙伴货款或分销返佣等场景&#xff0c;提高效率。 商家转账到零钱的使用场景有哪些&#xff1f; 商家…

(大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量

今天&#xff0c;面试了一家公司&#xff0c;什么也不说先来三道面试题做做&#xff0c;第一题。 那么&#xff0c;我们就开始做题吧&#xff0c;谁叫我们是打工人呢。 题目是这样的&#xff1a; 统计除豪车外&#xff0c;销售最差的车 车辆按批销售&#xff0c;每次销售若干…

IDC机房交换机核心技术与应用指南

IDC机房交换机核心技术与应用指南 ​ 在这个快速发展的数字时代&#xff0c;数据中心作为信息技术的心脏&#xff0c;不仅承载着海量数据的处理、存储和传输&#xff0c;更是支撑着全球企业运营和互联网服务的关键基础设施。在众多构成数据中心的组件中&#xff0c;IDC机房交换…

在autodl训练yolov8时卡在下载字体

1.问题 在autodl训练yolov8到这一步之后会卡住很久 2. 解决办法 Ctric中断后发现是下载Arial字体卡住了&#xff0c;这个字体需要从外网中下载 先手动从链接中下载https://ultralytics.com/assets/Arial.ttf &#xff0c;然后上传到autodl。然后将这个文件移动到/root/.config/…

RabbitMQ问题总结

:::info 使用场景 异步发送&#xff08;验证码、短信、邮件。。。&#xff09;MySQL 和 Redis、ES 之间的数据同步分布式事务削峰填谷… ::: 如何保证消息不丢失 上图是消息正常发送的一个过程&#xff0c;那在哪个环节中消息容易丢失&#xff1f;在哪一个环节都可能丢失 生…

Linux常见指令汇总

目录 pwd√ ls√ cd√ 对文件的理解√ which√ alias√ touch√ linux系统目录结构√ mkdir / tree √ rmdir / rm √ man√ nano√ cp√ mv√ cat√ echo√ linux设计理念和三种重定向总结√ more/less√ head/tail√ wc√ uniq√ date / cal√ find√…

【云原生】Docker私有仓库搭建以及四大容器重启策略

目录 一、registry私有仓库 步骤一&#xff1a;先拉取registry的镜像 步骤二&#xff1a;修改docker的配置文件重启 步骤三&#xff1a;基于registry镜像启动一个容器&#xff0c;可以设置为always重启策略 步骤四&#xff1a;修改想要上传的镜像的标签并上传验证 步骤五&…

83.网游逆向分析与插件开发-背包的获取-自动化助手显示装备数据

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;装备栏数据与算法的C还原-CSDN博客 码云地址&#xff08;ui显示角色数据 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号&#xff1a;849fed846405438d222…

有没有游泳可以戴的耳机,盘点2024年最值得入手的游泳耳机

最近几年的天气越来越炎热&#xff0c;水中运动无疑成为大家喜爱的清凉方式。无论是游泳、浮潜还是冲浪&#xff0c;都能让我们在享受清凉的同时&#xff0c;还能锻炼身体。然而&#xff0c;如果是音乐爱好者&#xff0c;想在游泳时也享受到动人的旋律&#xff0c;却因为耳机无…

亚马逊测评,完善的自养号系统需要具备哪些要求

在亚马逊等跨境电商平台的严格审查下&#xff0c;许多卖家和买家都遭到了封号。这些封号事件对依赖线上销售的小型卖家造成了巨大的冲击。我们发现大部分账号被封的原因在于底层环境搭建不当。 无论是在亚马逊还是其他跨境电商平台&#xff0c;如ebay、速卖通、虾皮、Lazada等…

学习PyQt5

1、布局之后&#xff0c;无法移动对象到指定区域&#xff0c;无法改变对象大小。 原因&#xff1a;因为CtrlA选中了整个窗口&#xff0c;然后布局的时候就相当于整个窗口都按照这种布局&#xff0c;如选了水平布局&#xff0c;按钮一直在中间&#xff0c;无法拖到其它位置。 …

2024年【裂解(裂化)工艺】及裂解(裂化)工艺模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 裂解&#xff08;裂化&#xff09;工艺是安全生产模拟考试一点通总题库中生成的一套裂解&#xff08;裂化&#xff09;工艺模拟考试题库&#xff0c;安全生产模拟考试一点通上裂解&#xff08;裂化&#xff09;工艺作…

Pandas.Series.product() 乘积(累乘积) 详解 含代码 含测试数据集 随Pandas版本持续更新

关于Pandas版本&#xff1a; 本文基于 pandas2.2.0 编写。 关于本文内容更新&#xff1a; 随着pandas的stable版本更迭&#xff0c;本文持续更新&#xff0c;不断完善补充。 传送门&#xff1a; Pandas API参考目录 传送门&#xff1a; Pandas 版本更新及新特性 传送门&…

dvwa靶场文件上传high

dvwa upload high 第一次尝试&#xff08;查看是否是前端验证&#xff09;第二次尝试我的上传思路最后发现是图片码上传修改配置文件尝试蚁&#x1f5e1;连接菜刀连接 第一次尝试&#xff08;查看是否是前端验证&#xff09; 因为我是初学者&#xff0c;所以无法从代码审计角度…

vue项目如何实现运行完项目就跳转到浏览器

在package.json中的启动命令中添加--open参数可以实现在Vue项目编译后自动打开浏览器的功能。 通过这样的设置&#xff0c;在运行npm run dev时&#xff0c;Vue项目编译完成后会自动打开默认浏览器并加载应用程序。

记签名机制

签名过程&#xff1a; 首先将数据源通过摘要算法获取到数字摘要 对数字摘要用私钥进行加密得到签名 将原始消息 以及签名发送给消息接收方 接收方用公钥解密得到数字摘要 用同样的摘要算法将原始消息进行计算 比较得到的数字摘要与解密后的是否一致 Android学习笔记——Androi…

在ubuntu上在安装Squid代理服务器

Squid 是一个代理和缓存服务器&#xff0c;它将请求转发到所需的目的地&#xff0c;同时保存请求的内容&#xff0c;当你再次请求相同内容时&#xff0c;他可以向你提供缓冲内容&#xff0c;从而提高访问速度。Squid代理服务器目前支持的协议有&#xff1a;http、SSL、DNS、FTP…

紫光展锐M6780丨超分辨率技术——画质重构还原经典

上一期&#xff0c;我们揭秘了让画质更加炫彩的AI-PQ技术。面对分辨率较低的老电影&#xff0c;光有高饱和度的色彩是不够的&#xff0c;如何能够提高视频影像的分辨率&#xff0c;使画质更加清晰&#xff0c;实现老片新看&#xff1f; 本期带大家揭晓紫光展锐首颗AI8K超高清智…

解决Android工程Gradle下载不动的问题

下不动原因&#xff1a;墙 解决方式去阿里云的镜像站下载对应的版本解压到gradle的安装目录 一般是这个 C:\Users\你的用户名\.gradle\wrapper\dists\ 比如我的 我要装7.2&#xff0c;那我就下载7.2 第一次android工程会自己创建好下载目录&#xff0c;我们把gradle-7.2-b…