【Kotlin精简】第1章 基础类型

1 Kotlin基础类型

Kotlin中,我们可以调用任何变量的成员函数和属性,从这个角度来说,一切皆对象。某些类型可以有特殊的内部表现。例如:数字字符布尔型在运行时可以表现为基础类型(primitivetypes)

1.1 数值

Kotlin的基本数值类型包括ByteShortIntLongFloatDoubleBoolean等。不同于Java的是,字符不属于数值类型,是一个独立的数据类型
在这里插入图片描述

1.1.1 字面常量

Long类型:用L​做标记,​​123L​​
float 类型:用f或者F标记:​​123.5f​​

1.1.2 数值字面值中的下划线

下划线可以使数值常量更具可读性:

val oneMillion = 1_000_000

1.1.3 表现形式

== 值对比
=== 地址对比

1.1.4 显式转换

小类型不会隐式转换成大类型。不通过显示转换,我们无法把一个Byte​赋值给​Int

val b: Byte = 1 // OK, literals are checked statically
val i: Int = b // ERRORval i: Int = b.toInt()  // OK: explicitly widenedval l = 1L + 3 // Long + Int => Long

每个数值类型都支持如下转换:

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

1.1.5 运算

如下是位运算操作符的完整列表(只用于​​Int​​​和​​Long​​):

shl(bits)​​​ - 有符号左移(Java 的 ​​<<​​)
​​shr(bits)​​​ - 有符号右移(Java 的 ​​>>​​)
​​ushr(bits)​​​ - 无符号右移(Java 的 ​​>>>​​)
​​and(bits)​​ - 位的与运算
​​or(bits)​​ - 位的或运算
​​xor(bits)​​ - 位的异或运算

1.1.6 浮点数比较

相等检查:​​a == b​​​和​​a != b​​
比较操作符:​​a < b​​​,​​a > b​​​,​​a <= b​​​,​​a >= b​​
范围初始化和范围检查:​​a…b​​​,​​xina…b​​​,​​x!ina…b​​

当操作数​​a​​​和​​b​​​静态已知为类型​​Float​​​或​​Double​​​,以及它们对应的可空类型。但是为了支持通用的使用场景以及提供完整的排序,当操作数不是浮点数的静态类型(如​​Any​​​、​​Comparable<…>​​​,类型参数)时,运算操作会使用​​Float​​​和​​Double​​​​​equals​​​和​​compareTo​​实现,这会导致异与标准,因此:

​​NaN​​等于它自己
​​NaN​​​大与所有其他元素,包括​​POSITIVE_INFINITY​​
-0.0​​​小于​​0.0​​

1.2 字符

​​Char​​表示字符,不能直接用作数值:
字符用单引号来表示:​​'1'​​。特殊字符可以使用反斜杠转义
特殊字符可以用反斜杠转义。支持的转义序列有:​​\t​​​、​​\b​​​​​\n​​​​​\r​​​、​​\'​​​、​​\"​​​​​\\​​​​​\$​​​。如果要编译其他字符,可以使用 Unicode转义序列语法:​​\uFF00​​

我们可以显示地把一个字符转换成一个Int数值:

fun decimalDigitValue(c: Char): Int {if (c !in '0'..'9')throw IllegalArgumentException("Out of range")return c.toInt() - '0'.toInt() // Explicit conversions to numbers
}

就像数值那样,字符的空引用也会自动装箱。装箱操作不会保留字符的身份(identity)。

1.3 字符串

字符串由 ​​String​​​ 表示。字符串是不可变的。字符串的元素可通过下标访问:​​s[i]​​​。字符串可通过 ​​for​​ 循环遍历。
纯字符串通过三个引号(​​"""​​)来界定,它不会包含转义而且能够包含换行和任意字符:

val text = """for (c in "foo")print(c)
"""

可以通过 ​​trimMargin()​​ 去除开头的空字符:

// 默认情况下,`​​|​​​` 用作 `margin` 前缀,
// 但是也可以使用其他字符作为参数传给 `​​trimMargin​​​`,例如 ​​`trimMargin(">")`​​。
val text = """|Tell me and I forget|Teach me and I remember.|Involve me and I learn.|(Benjamin Franklin)""".trimMargin()

字符串可以包含模板表达式:

// 模板表达式以美元符号($)或大括号内的任意表达式
val s = "abc"
val str = "$s.length is ${s.length}" // evaluates to "abc.length is 3"// 在纯字符串(不支持转义)中展示 ​​$​​ 符号
val price = """
${'$'}9.99
"""

1.4 布尔型

与Java一致。
​​Boolean​​​表示布尔型,有两个值:​​true​​​ 和 ​​false​​。
布尔的可空引用会自动装箱。

内置操作符包括:

​​||​​ - lazy disjunction
​​&&​​ - lazy conjunction
​​!​​ - negation

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

架构师选择题--计算机网络

架构师选择题--计算机网络 22年考题21年考题20年考题19年真题2017考题 22年考题 d http:80 https:httpssl &#xff1a;443 b b pop3是邮件接收协议&#xff1a;110 SMTP是邮件发送协议&#xff1a;25 http:80 A 网络隔离&#xff1a;防火墙&#xff08;逻辑&#xff09;&…

五.docker+jenkins自动部署项目

一.敏捷开发相关概念 1.微服务的痛点 再来看一下我们的微服务架构 &#xff0c; 每个组件都需要服务器去部署&#xff0c;加起来可能需要几十个甚至上百个服务器。这样的微服务项目在部署上会遇到什么问题&#xff1f; 需要很多很多的服务器&#xff0c;服务器的采购安装&am…

【iOS】——仿写计算器

文章目录 一、实现思路二、实现方法三、判错处理 一、实现思路 先搭建好MVC框架&#xff0c;接着在各个模块中实现各自的任务。首先要创建好UI界面&#xff0c;接着根据UI界面的元素来与数据进行互动&#xff0c;其中创建UI界面需要用到Masonry布局。 二、实现方法 在calcu…

【C++面向对象侯捷下】4. pointer-like classes,关于智能指针 | 5. function-like classes,所谓仿函数

文章目录 4. pointer-like classes,关于智能指针pointer-like classes,关于智能指针 shared_ptrpointer-like classes,关于迭代器5. function-like classes&#xff0c;所谓仿函数【不懂&#xff0c;跳过】 4. pointer-like classes,关于智能指针 pointer-like classes,关于智…

win11系统下,将WSL2从系统盘(C盘)迁移到迁移到数据盘(D盘)

WSL2迁移磁盘 网上的一些方法 今天希望把WSL迁移到D盘&#xff0c;原因就是C盘剩余空间太少了&#xff0c;系统有一点卡顿&#xff0c;然后百度了一下迁移的方法&#xff0c;发现真的是八仙过海&#xff0c;各显神通啊&#xff0c;改注册表、exclude为.tar然后重新导入等等&a…

阿里云轻量应用服务器有月流量限制吗?

阿里云轻量应用服务器限制流量吗&#xff1f;部分限制&#xff0c;2核2G3M和2核4G4M这两款轻量应用服务器不限制月流量&#xff0c;其他的轻量服务器套餐有月流量限制。 腾讯云轻量应用服务器价格便宜&#xff0c;活动页面&#xff1a;aliyunbaike.com/go/tencent 细心的同学看…

Eclipse iceoryx™ - 真正的零拷贝进程间通信

1 序言 通过一个快速的背景教程&#xff0c;介绍项目范围和安装所需的所有内容以及第一个运行示例。 首先&#xff1a;什么是冰羚&#xff1f; iceoryx是一个用于各种操作系统的进程间通信&#xff08;IPC&#xff09;中间件&#xff08;目前我们支持Linux、macOS、QNX、FreeBS…

掌握 BERT:自然语言处理 (NLP) 从初级到高级的综合指南(1)

简介 BERT&#xff08;来自 Transformers 的双向编码器表示&#xff09;是 Google 开发的革命性自然语言处理 (NLP) 模型。它改变了语言理解任务的格局&#xff0c;使机器能够理解语言的上下文和细微差别。在本文[1]中&#xff0c;我们将带您踏上从 BERT 基础知识到高级概念的旅…

【单元测试】如何使用 JUnit5 框架?

JUnit5 单元测试框架使用教程 一、Junit5 是什么&#xff1f; Junit5是一个用于在Java平台上进行单元测试的框架。JUnit 5 框架主要由三部分组成&#xff1a;JUnit Platform、JUnit Jupiter 和 JUnit Vintage。 JUnit Platform&#xff1a;定义了测试引擎的 API&#xff0c;是…

No168.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

【Python从入门到进阶】38、selenium关于Chrome handless的基本使用

接上篇《37、selenium关于phantomjs的基本使用》 上一篇我们介绍了有关phantomjs的相关知识&#xff0c;但由于selenium已经放弃PhantomJS&#xff0c;本篇我们来学习Chrome的无头版浏览器Chrome Handless的使用。 一、Chrome Headless简介 Chrome Headless是一个无界面的浏览…

基于支持向量机SVM和MLP多层感知神经网络的数据预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 一、支持向量机&#xff08;SVM&#xff09; 二、多层感知器&#xff08;MLP&#xff09; 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .…