当前位置: 首页 > news >正文

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 = 111val 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.lryc.cn/news/290731.html

相关文章:

  • 单片机之keil软件环境搭建
  • 数学公式OCR识别php 对接mathpix api 使用公式编译器
  • MySQL原理(二)存储引擎(1)概述
  • 微信小程序canvas画布如何解决在for循环绘制图像显示不全的问题
  • Python计算机二级/Python期末考试 刷题(一)
  • 最新GPT4.0使用教程,AI绘画-Midjourney绘画,GPT语音对话使用,DALL-E3文生图+思维导图一站式解决
  • 【JavaScript】两种方法实现继承
  • 张维迎《博弈与社会》笔记(3)导论:一些经济学的基础知识
  • 随机生成UI不重叠
  • 【C/C++】C/C++编程——第一个 C++ 程序:HelloWorld
  • 扩散视觉反事实算法 DVC:对抗性鲁棒分类器 + 扩散模型,跨模态对比原始的 fundus 图 VS 生成的 OCT 图
  • C++(6) 继承
  • 【Servlet】Smart Tomcat插件简化Servlet开发流程及解决常见问题
  • 解决Qt连接不上mysql数据库
  • kubernetes-快速部署一套k8s集群
  • Windows Server 安装 Docker
  • 智能分析网关V4智慧机房:视频AI智能安全监管方案
  • 一些反序列化总结
  • 分披萨(100%用例)C卷(JavaPythonC++Node.jsC语言)
  • SQL字符串截取函数【简笔记】
  • 会话技术复习笔记
  • 我用Rust开发Rocketmq name server
  • 【Deep Dive: Al Webinar】开源人工智能中赋能、透明性和可重复性三者之间的关系...
  • 将Html页面转换为Wordpress页面
  • Next.js 学习笔记(七)——样式
  • 金线检测步骤
  • 电池-电量监测基础知识
  • 西瓜书学习笔记——层次聚类(公式推导+举例应用)
  • 深度视觉目标跟踪进展综述-论文笔记
  • 【数据结构:顺序表】