【教程】Kotlin语言学习笔记(二)——数据类型(持续更新)

文首标志
写在前面:
如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持!


【Kotlin语言学习】系列文章

第一章 《认识Kotlin》
第二章 《数据类型》


文章目录

  • 【Kotlin语言学习】系列文章
  • 一、基本数据类型
    • (一)整数类型
    • (二)浮点类型
    • (三)字符类型
    • (四)布尔类型
  • 二、字符串
    • (一)字符串定义
    • (二)字符串模板
    • (三)字符串拼接
    • (四)字符串转义
  • 三、类型强制转换
  • 四、数学运算
    • (一)常见运算
    • (二)位运算


一、基本数据类型

(一)整数类型

在 Kotlin 中,整数类型表示整数值。Kotlin 提供了多个整数类型,以便根据需求选择合适的类型。

类型关键字位宽最小值最大值
字节型Byte8-128127
短整型Short16-3276832767
整型Int32-2^312^31-1
长整型Long64-2^632^63-1

在计算机当中,最小的数据存储单位就是位(Bit),而所有数字在储存的时候,都是二进制储存,而二进制中,8位称之为1个字节(Byte),位宽则是数据占用的位的总数。可以看到,不同的数据类型就占用了不同的位宽。
下面是对各种整数类型的变量声明示例。

val number = 100 // 默认是Int类型
val bigNumber = 8000000000 // 超过Int最大值,默认为Long类型
val longNumber = 20L // 在赋值数字后面增加后缀L声明Long类型
val byteNumber:Byte = 1 //在变量后用冒号声明Byte类型,再进行赋值

值得注意的是,所有未超过Int最大值的整型值初始化的变量都默认为Int类型,如果初始值超过了其最大值,那么将推断为Long类型。

(二)浮点类型

在 Kotlin 中,浮点类型表示带有小数部分的数字。Kotlin 提供了两种浮点类型:Float 和 Double。

类型关键字位宽
浮点型Float32
双精度浮点型Double64

下面是对两种浮点数类型的变量声明示例。

val defaultDouble = 3.14 // 输入小数默认为Double类型
val doubleNumber = 3.1415926535 // 小数位超过6位也默认是Double类型
val floatNumber = 3.1415926535f // 在赋值数字后面增加后缀f声明Float类型

Kotlin对于小数的默认推断是Double类型。如果需要显式地将一个小数指定为Float类型,则需要在数值尾部加入f或者F的字母后缀。由于Float类型十进位数是6位,所以上述示例中floatNumber实际值大小为3.1415927,后面就会出现进度丢失舍弃。

(三)字符类型

在 Kotlin 中,字符类型表示单个字符。Kotlin 使用 Char 类型来表示字符。Char 类型是一个 16 位的无符号整数,可表示 Unicode 字符。

要声明一个字符变量,可以使用 char 或者 Char 关键字,并使用单引号''将字符括起来。

val letter: Char = 'A'// 用单引号括起来的单个字符

(四)布尔类型

在 Kotlin 中,布尔类型用于表示逻辑值。Kotlin 提供了一个 Boolean 类型,只有两个可能的取值:truefalse

val isVisible0:Boolean = false// 布尔值中的假,返回0
val isVisible1:Boolean = true// 布尔值中的真,返回1

二、字符串

在 Kotlin 中,String 被视为引用类型,并且不属于基本数据类型。然而,由于 Kotlin 对于基本数据类型提供了很多方便的语法和操作符,使得它们在使用上更接近于原始类型。在 Kotlin 中,这些基本数据类型具有与引用类型类似的行为,并且享受了编译器对它们的多态优化。

String 类型是不可变的,也就是说,一旦创建了一个字符串对象,就不能对其进行修改。如果需要修改字符串,可以使用字符串的一些方法和操作符来创建新的字符串对象。

(一)字符串定义

要声明一个字符串变量,可以使用 String 关键字,并使用双引号""将字符串括起来。

val str:String = "1234567890"

由于字符串String被视为引用类型,就可以通过[]引用来访问字符串中具体的某个字符。

val str:String = "1234567890"
val strNumber2:Char = str[1]// 元素计数从0开始,1即代表第二个
println("strNumber2:"+strNumber2)

通过println可以打印出strNumber2的结果。返回结果如下。

strNumber2:2

由此可以确定,通过访问具体的元素,可以从字符串中单独取出并输出。

(二)字符串模板

字符串字面值可以包含模板表达式,即一些小段代码,会求值并把结果合并到字符串中。模板表达式以美元符$开头,有一个简单的名字构成。

val number = 100
println("The result is $number")

返回结果如下。

The result is 100

不仅是简单的变量名,使用${}括起来的任意表达式都能够在字符串中被识别为代码输出。

val text = "This is text"
println("Text length is ${text.length}")

其中,text.length是访问了text的衡量长度方法,可以得到变量的长度。
返回结果如下。

Text length is 12

同时,字符串与转义字符串内部都支持模板,如果需要在原始字符串中表示字面值美元符$,则可以使用下列语法。

val price = "${'$'}9.99 "

输出结果如下。

$9.99

(三)字符串拼接

Kotlin的字符串可以使用加法操作符+实现字符串的拼接,不仅适用于连接字符串和字符串,同时也支持连接字符串与其他类型的值。

println("I am " + 10 + " years old!")

返回结果如下。

I am 10 years old!

(四)字符串转义

Kotlin有两种类型的字符串字面值:转义字符串可以有转义字符,以及原始字符串可以包含换行以及任意文本。转义字符有以下用法:

  • 使用\n换行
  • 使用反斜杠\对双引号""进行转义
  • 使用三个引号即分界符"""将内部任何字符转换为字符串,还可以通过使用trimMargin()函数去除前导空格

具体示例如下。

println("Hello\nWorld!")// \n换行 
println("He says:\"Yes!\"")// \反斜杠转义双引号 
println(
	"""
		val number = 1
		val char = 'c'
	""".trimIndent()
)// 分界符内部没有转义并且可以包含换行以及其他任何字符

返回结果如下。

Hello
World!
He says, “Yes!”
val number = 1
val char = ‘c’

三、类型强制转换

数据类型之间可以通过调用toType()方法来强行转换类型。

转换类型方法
BytetoByte()
ShorttoShort()
InttoInt()
LongtoLong()
FloattoFloat()
DoubletoDouble()
ChartoChar()
StringtoString()

示例如下。

val before:Int = 100
println("transform to string:${before.toString()}")

返回结果如下。

transform to string:100

四、数学运算

(一)常见运算

在 Kotlin 中,支持以下常见的算术运算符:

符号名称作用
+加法运算符用于执行两个操作数的相加运算
-减法运算符用于执行两个操作数的相减运算
*乘法运算符用于执行两个操作数的相乘运算
/除法运算符用于执行两个操作数的相除运算
%取模运算符用于获取两个操作数相除后的余数
++自增运算符用于将操作数的值增加1
--自减运算符用于将操作数的值减少1

(二)位运算

Kotlin中的位运算采用了中缀函数方式调用具名函数。

使用名称描述示例
and&位与对两个二进制数的对应位进行与操作,只有当两个位都为1时,结果位才为1a and ba & b
or|位或对两个二进制数的对应位进行或操作,只有当至少一个位为1时,结果位才为1a or ba | b
xor^位异或对两个二进制数的对应位进行异或操作,只有当两个位不相同时,结果位才为1a xor ba ^ b
inv位非对一个二进制数的每个位取反,0 变为 1,1 变为 0inv(a)!a
shl<<左移将一个二进制数的所有位向左移动指定的位数,左侧的位将被丢弃,右侧空出的位用0填充a shl ba << b
shr>>右移将一个二进制数的所有位向右移动指定的位数,右侧的位将被丢弃,左侧空出的位用符号位填充(对于正数用0填充)a shr ba >> b
ushr>>>无符号右移将一个二进制数的所有位向右移动指定的位数,右侧的位将被丢弃,左侧空出的位用0填充a ushr ba >>> b

我是EC,一个永远在学习中的探索者,关注我,让我们一起进步!

文末标志

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

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

相关文章

从零开始做题:逆向 ret2libc jarvisoj level1

1.题目信息 BUUCTF在线评测 2.原理 篡改栈帧上的返回地址为攻击者手动传入的shellcode所在缓冲区地址&#xff0c;并且该区域有执行权限。 3.解题步骤 3.1 首先使用checksec工具查看它开了啥保护措施 基本全关&#xff0c;栈可执行。 rootpwn_test1604:/ctf/work/9# chec…

【双指针】【C++算法】1537. 最大得分

作者推荐 【深度优先搜索】【树】【图论】2973. 树中每个节点放置的金币数目 本文涉及知识点 双指针 LeetCoce 1537. 最大得分 你有两个 有序 且数组内元素互不相同的数组 nums1 和 nums2 。 一条 合法路径 定义如下&#xff1a; 选择数组 nums1 或者 nums2 开始遍历&…

极其抽象的SpringSecurity理解

原始&#xff1a;A → B Security&#xff1a;A → S → B 太抽象了&#xff0c;看不懂啊T_T 抽象故事 故事大概&#xff1a;C是一个大区&#xff0c;拥有巨大的火力&#xff08;C准备联合B吞并掉A&#xff09;&#xff0c;A得到了这个消息&#xff0c;…

解决‘vue‘ 不是内部或外部命令,也不是可运行的程序(设置全局变量)

发现是没有执行&#xff1a; npm install -g vue/cli 但是发现还是不行 此时&#xff0c;我们安装了 Vue CLI&#xff0c;但是在运行 vue ui 命令时出现了问题。这通常是因为全局安装的 Vue CLI 的路径没有被正确地添加到系统的环境变量中。 可以尝试以下几种方法来解决这个问…

视觉slam十四讲学习笔记(四)相机与图像

理解理解针孔相机的模型、内参与径向畸变参数。理解一个空间点是如何投影到相机成像平面的。掌握OpenCV的图像存储与表达方式。学会基本的摄像头标定方法。 目录 前言 一、相机模型 1 针孔相机模型 2 畸变 单目相机的成像过程 3 双目相机模型 4 RGB-D 相机模型 二、图像…

LEETCODE 315. 计算右侧小于当前元素的个数(归并)

class Solution { public: // 将count声明为publicvector<int> count; vector<int> indexs,tmp;public:vector<int> countSmaller(vector<int>& nums) {//归并int left0;int rightnums.size()-1;//计数// vector<int> count(nums.size()); …

【MATLAB】PSO_BP神经网络回归预测(多输入多输出)算法原理

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 PSO-BP神经网络回归预测&#xff08;多输入多输出&#xff09;算法是一种结合粒子群优化算法&#xff08;PSO&#xff09;和反向传播&#xff08;BP&#xff09;神经网络的混合算法。该算…

CSS之选择器、优先级、继承

1.CSS选择器 常用的选择器 <body><div class"parent"><div id"one" style"background: blue" class"child">1<div class"one_one">11</div><div style"background-color: blueviole…

vue3 Element Plus 基于webstorm练习

提要 vue是前端框架&#xff0c;Elemen是组件库。前端框架和组件库的区别与联系 nodejs 脚本语言需要一个解析器才能运行&#xff0c;JavaScript是脚本语言&#xff0c;在不同的位置有不一样的解析器&#xff0c;如写入html的js语言&#xff0c;浏览器是它的解析器角色。而对…

浅谈业务场景中缓存的使用

业务场景中缓存的使用 一、背景二、缓存分类1.本地缓存2.分布式缓存 三、缓存读写模式1.读请求2.写请求 四、缓存穿透1.缓存空对象2.请求校验3.请求来源限制4.布隆过滤器 五、缓存击穿1.改变过期时间2.串行访问数据库 六、缓存雪崩1.避免集中过期2.提前更新缓存 七、缓存与数据…

TMGM公司官网介绍

TMGM主要提供外汇、贵金属、原油、股指等CFD产品&#xff0c;客户可以根据个人的交易习惯选择其中一种或多种进行投资。具体来说&#xff0c;TMGM的金融产品包括但不限于货币对、黄金、原油、股票指数等。此外&#xff0c;TMGM还提供多种账户类型以满足不同客户的交易需求。 请…

error MSB8008: 指定的平台工具集(v143)未安装或无效。请确保选择受支持的 PlatformToolset 值解决办法

右击解决方案&#xff0c;选择属性 将工具集为143的修改为其他&#xff0c;如图 重新编译即可运行

DDC技术:AIGC网络的革命性解决方案

2023年&#xff0c;人工智能生成内容&#xff08;AIGC&#xff09;技术将蓬勃发展&#xff0c;其中ChatGPT作为一个典型案例&#xff0c;在文本生成、代码开发和诗歌创作等多个领域引起行业变革。DDC技术对改变网络格局具有创新和突破性意义&#xff0c;很大程度上提升了效率和…

Python 读取pdf文件

Python 实现读取pdf文件简单示例。 安装命令 需要安装操作pdf的三方类库&#xff0c;命令如下&#xff1a; pip install pdfminer3K 安装过程如下&#xff1a; 引入类库 需要引入很多的类库。 示例如下&#xff1a; import sys import importlib importlib.reload(sys)fr…

汽车零部件制造业MES系统解决方案

一、​汽车零部件行业现状 随着全球汽车产业不断升级&#xff0c;汽车零部件市场竞争日趋激烈&#xff0c;从上游的钢铁、塑料、橡胶等生产到下游的主机厂配套制造&#xff0c;均已成为全球各国汽车制造大佬战略目标调整的焦点&#xff0c;其意欲在汽车零部件行业快速开疆扩土&…

蓝牙BLE学习-GAP

1.概述 GAP层&#xff08;Generic access profile-通用访问配置文件&#xff09;。GAP是对LL层payload&#xff08;有效数据包&#xff09;如何进行解析的两种方式的一种&#xff0c;而且也是最简单的一种。GAP简单的对LL payload进行一些规范和定义&#xff0c;因此GAP能实现的…

Compose高级别API动画指南

前文讲了Compose中的低级别API动画&#xff0c;与之对应的&#xff0c;还有高级别API动画&#xff0c;同样也符合Material-Design规范。所有高级别动画 API 都是在低级别动画 API 的基础上构建而成&#xff0c;其对应关系如图&#xff1a; 接下来就对其高级别API逐个分析&…

【王道数据结构】【chapter5树与二叉树】【P159t12】

设一棵二叉树的结点结构为(LLINK,INFO,RLINK)&#xff0c;ROOT为指向该二叉树根结点的指针&#xff0c;p和q分别为指向该二叉树中任意两个节点的指针&#xff0c;试编写算法ANCESTOR(ROOT,p,q,r)&#xff0c;找到p和q的最近公共祖先结点r #include <iostream> #include &…

Linux第54步_根文件系统第1步_编译busybox并安装_然后添加“根文件系统”的库

学习编译busybox&#xff0c;并安装&#xff0c;然后添加“根文件系统”的库。有人说busybox构建根文件系统&#xff0c;只适合学习&#xff0c;不适合做项目。 1、了解ubuntu的根文件系统 根文件系统的目录名为“/”&#xff0c;就是一个斜杠。 1)、输入“cd /回车”&…

算法学习——LeetCode力扣二叉树篇7

算法学习——LeetCode力扣二叉树篇7 236. 二叉树的最近公共祖先 236. 二叉树的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09; 描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点…