Kotlin新手教程二(Kotlin基本数据类型及基础语法)
一、基本数据类型
1.数字

由于Kotlin支持类型推断,所以在使用时若超出Int的范围则会被认定为其它类型;若需要显式指定Long型值,则需要在值后添加L后缀。
2.浮点数

3.比较两个数( == 和 ===)
Kotlin 中没有基础数据类型,只有封装的数字类型,你每定义的一个变量,其实 Kotlin 帮你封装了一个对象,这样可以保证不会出现空指针。比较相等时,== 表示比较值, === 表示比较两个值得大小。

这里虽然都是将num的值赋值给a和b,但是Int?这种形式的写法会将其直接装箱。所以a和b的值相等,地址不相等
4.类型转换
在日常的开发中可能会使用到不同数值类型的转换,这个时候我们就可以使用to类型名就可以将其进行转化 ,如:

这样就将Int类型的数值转化成为了Byte
5.位操作符
Kotlin的位操作符和Java中不同,下面我们做一个对比:

6.字符和布尔
和 Java 不一样,Kotlin 中的 Char 不能直接和数字操作(但是可以显示把字符转换为数字),Char 必需是单引号 ’ 包含起来的。比如普通字符 ‘0’,‘a’。
布尔使用Boolean类型表示,和Java一样,有true和false两个值
7.数组
数组在 Kotlin 中使用 Array 类来表示,它定义了 get 与 set 函数(按照运算符重载约定这会转变为 [])以及 size 属性,以及一些其他有用的成员函数。
创建数组:
val arr= arrayOf(1,2,3,4,5)for (i in arr){println(i)}

也可以像Java一样使用下标读取或者修改数组中的值,这实际也是调用了get和set方法。
8.字符串
和Java一样,Kotlin的字符串也不可变,但是可以使用索引运算法访问,也可以使用for循环迭代字符串:
val str:String="abc"println(str[0])for (i in str){println(i)}

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

二、基础语法
1.函数
Kotlin的函数至少满足以下几点:
- 使用fun关键字修饰
- 需要函数名
- 函数体
具体集中写法如下:
1.无返回值函数(Unit函数)
fun myFun(){println("myFun")}
2.带有两个 Int 参数、返回 Int 的函数
fun myFun(a: Int, b: Int): Int {return a + b
}
3.匿名函数(lambda表达式)
匿名函数虽然没有名字,但是可以赋值给变量,这个变量的类型就是函数类型。和具名函数不一样,匿名函数通常不需要return关键字返回数据。匿名函数会隐式的或自动返回最后一行代码的执行结果。
fun main() {//声明一个匿名函数,并赋值给变量myFunval myFun: () -> String = {"Hello world!"}//匿名函数调用println(myFun())
}
带参数的匿名函数:
fun main() {val myFun: (name: String) -> String = { name ->"Hello $name!"}println(myFun("jywei"))
}
当参数只有一个时,可以使用关键字it指代,上述代码可写成:
fun main() {val myFun: (name: String) -> String = {"Hello $it!"}println(myFun("jywei"))
}
4.可变长参数函数
在Java中可变长参数可以使用数组或者…表示,在kotlin中可以使用vararg进行标识:
fun vars(vararg v:Int){for(vt in v){print(vt)}
}// 测试
fun main(args: Array<String>) {vars(1,2,3,4,5) // 输出12345
}
2.变量、常量、注释
在Kotlin中使用val修饰常量(不可变),使用var修饰变量(可变)
Kotlin中的注释有很多种
//行注释
/*多行注释*/
/* 注释从这里开始/* 包含嵌套的注释 */ 并且在这里结束。 */
3.字符串模板
$ 表示一个变量名或者变量值
$varName 表示变量值
${varName.fun()} 表示变量的方法返回值:
var a = 1
// 模板中的简单名称:
val s1 = "a is $a" a = 2
// 模板中的任意表达式:
val s2 = "${s1.replace("is", "was")}, but now is $a"
4.空值与null检测
当某个变量的值可以为 null 的时候,必须在声明处的类型后添加 ? 来标识该引用可为空。
使用返回可空值的函数:
fun printProduct(arg1: String, arg2: String) {val x = parseInt(arg1)val y = parseInt(arg2)// 直接使用 `x * y` 会导致编译错误,因为它们可能为 nullif (x != null && y != null) {// 在空检测后,x 与 y 会自动转换为非空值(non-nullable)println(x * y)}else {println("'$arg1' or '$arg2' is not a number")}
}
或者
if (x == null) {println("Wrong number format in arg1: '$arg1'")return
}
if (y == null) {println("Wrong number format in arg2: '$arg2'")return
}// 在空检测后,x 与 y 会自动转换为非空值
println(x * y)
5.类型检测与自动类型转换
可以使用is判断一个变量或者常量是否属于某个类型,可以使用!is判断一个变量或者常量是否不属于某个类型。
6.区间
Kotlin可以使用…表示区间
for (i in 1..4) print(i) // 输出“1234”for (i in 4..1) print(i) // 什么都不输出if (i in 1..10) { // 等同于 1 <= i && i <= 10println(i)
}// 使用 step 指定步长
for (i in 1..4 step 2) print(i) // 输出“13”for (i in 4 downTo 1 step 2) print(i) // 输出“42”// 使用 until 函数排除结束元素
for (i in 1 until 10) { // i in [1, 10) 排除了 10println(i)
}
上一篇:Kotlin新手教程一(Kotlin简介及环境搭建)
相关文章:
Kotlin新手教程二(Kotlin基本数据类型及基础语法)
一、基本数据类型 1.数字 由于Kotlin支持类型推断,所以在使用时若超出Int的范围则会被认定为其它类型;若需要显式指定Long型值,则需要在值后添加L后缀。 2.浮点数 3.比较两个数( 和 ) Kotlin 中没有基础数据类型&a…...
git idea创建新分支,获取/合并主支代码的2个方法
其他sql格式也在更新中,可直接查看这个系列,要是没有你需要的格式,可在评论或私信我 个人目录 获取主支代码的2个方法1,创建一个分支,获取主支的所有代码(场景:我需要一个自己的分支进行编写模…...
CF1714A Everyone Loves to Sleep 题解
CF1714A Everyone Loves to Sleep 题解题目链接字面描述题面翻译题目描述输入格式输出格式样例解释题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1代码实现题目 链接 https://www.luogu.com.cn/problem/CF1714A 字面描述 题面翻译 题目描述 Vlad和其他人一样&am…...
oracle官方下载历史版本JDK版本
背景 日常工作中由于一些特殊原因,我们需要下载指定系统指定位数指定版本的jdk,这个时候去网上搜索下载就会遇到各种坑,病毒、诱导连接、诱导关注/注册、付费、错误版本等,所以最好的办法是去官网下载,下面列举两种方式…...
双击-jar包无法运行解决方法
我自己是通过探索出来的方法解决的,网上的方法适合普通问题 网络流传方法 那种-jar和run.bat的就是曲解了问题意思,问题不是如何运行,而是如何双击jar包就可以直接运行。 普通小问题就是修改注册表,将java路径写进去后面加个 %1…...
程序员的自我修养第七章——动态链接 (下)
接上一篇。 7.3 地址无关代码 对于现代机器来说,引入地址无关代码并不麻烦,我们展示下各种模型的地址引用方式: 1. 模块内部函数调用 2. 模块内部的数据访问,如全局变量、静态变量。 3. 模块外部的函数调用,跳转。 4.…...
蓝桥杯刷题——基础篇(二)
这部分题目,主要面向有志参加ACM与蓝桥杯竞赛的同学而准备的,蓝桥杯与ACM考察内容甚至评测标准基本都一样,因此本训练计划提供完整的刷题顺序,循序渐进,提高代码量,巩固基础。因竞赛支持C语言、C、Java甚至…...
PTA L1-049 天梯赛座位分配(详解)
前言:内容包括:题目,代码实现,大致思路,代码解读 题目: 天梯赛每年有大量参赛队员,要保证同一所学校的所有队员都不能相邻,分配座位就成为一件比较麻烦的事情。为此我们制定如下策…...
Linux部分参数作用讲解
♥️作者:小刘在C站 ♥️个人主页:小刘主页 ♥️每天分享云计算网络运维课堂笔记,努力不一定有收获,但一定会有收获加油!一起努力,共赴美好人生! ♥️夕阳下,是最美的绽放࿰…...
Java kafka
JAVA面试题--Kafka(最新最全) 目录概述需求:设计思路实现思路分析1.URL管理2.网页下载器3.爬虫调度器4.网页解析器5.数据处理器拓展实现性能参数测试:参考资料和推荐阅读)Survive by day and develop by night. talk for import b…...
DBA之路---Stream数据共享同步机制与配置方法
oracle的Stream解析–数据共享 在g版本常用,如果是c版本项目一般都会选择goldengate,比stream靠谱多了 Oracle中的stream是消息队列一种应用形式,原理如下: 收集oracle中的事件,将事件保存在队列里,然后将…...
CF1790E Vlad and a Pair of Numbers 题解
CF1790E Vlad and a Pair of Numbers 题解题目链接字面描述题面翻译题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1思路代码实现题目 链接 https://www.luogu.com.cn/problem/CF1790E 字面描述 题面翻译 共有 ttt 组数据。 每组数据你会得到一个正整数 xxx&…...
漏洞预警|Apache Kafka Connect JNDI注入漏洞
棱镜七彩安全预警 近日网上有关于开源项目Apache Kafka Connect JNDI注入漏洞,棱镜七彩威胁情报团队第一时间探测到,经分析研判,向全社会发起开源漏洞预警公告,提醒相关安全团队及时响应。 项目介绍 Karaf是Apache旗下的一个开…...
企业小程序开发步骤【教你创建小程序】
随着移动互联网的兴起,微信已经成为了很多企业和商家必备的平台,而其中,微信小程序是一个非常重要的工具。本文将为大家介绍小程序开发步骤,教你创建小程序。 步骤一、注册小程序账号 先准备一个小程序账号,在微信公…...
刚性电路板的特点及与柔性电路板的区别
打开市场上的任何一个电子产品,会发现里面都有一块或多块电路板。电路板是电子产品运行的核心,之前沐渥小编已经给大家介绍了柔性电路板,下面给大家介绍刚性电路板的基础知识。 刚性电路板俗称硬板,是由不容易变形的刚性基材制成的…...
扫码过磅+车牌识别,内蒙古蒙维过磅实现信息化管理
扫码过磅、车牌识别、对接SAP ERP系统设计思路: 无人值守系统升级改造包括车牌自动识别系统、信息化(扫码等方式)管理系统、智能自动控制系统等实现信息无纸化传递。远程监管地点设于公司东磅房,可以实现远程监测监控画面、称重过…...
蒙特卡洛计算圆周率
使用MC计算圆周率的小例子,使用python的numpy,matplotlib库import numpy as npimport matplotlib.pyplot as pltdef mc_calculate_pi(t):np.random.seed(t)rand_num np.random.rand(t)rand_num2 np.random.rand(t)l1 rand_num-0.5l2 rand_num2-0.5l0…...
生物信息场景下的用户需求
背景分析概念定义基因测序是一种新型基因检测技术,是基因检测的方法之一,其又叫基因谱测序,是国际上公认的一种基因检测标准。基因测序技术能锁定病变基因,提前预防和治疗。过长的测序周期以及上万美元的仪器成本,成了…...
linux su(switch user)和sudo(superuser do)的区别?(sudo su与su的区别)
文章目录linux su(switch user)和sudo(superuser do)的区别?sudo su与su的区别linux su(switch user)和sudo(superuser do)的区别? 在Unix或Linux操作系统中…...
PostgreSQL的学习心得和知识总结(一百二十三)|深入理解PostgreSQL数据库开源扩展pg_dirtyread的使用场景和实现原理
目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《PostgreSQL数据库内核分析》 2、参考书籍:《数据库事务处理的艺术:事务管理与并发控制》 3、PostgreSQL数据库仓库…...
高并发40问学习笔记
1.缓存穿透缓存穿透是指大量访问不能在缓存中命中,需要去数据库访问,但数据库能支持的访问量是有限的,如果缓存命中率可能下降1%都会影响数据库的可用性。解决缓存穿透最简单的方式是限制请求的数量,然后对于一个具体的问题&#…...
windows用户有哪些必备的小工具软件能大幅提高效率而且占用资源低?
Windows用户,你是否也遇到过这些痛点?软件占用大、效率不高、甚至广告多?本文整理13款经过网友高口碑的工具,涵盖截图标注、文件管理、系统优化等场景,全部免费无广告且占用资源极低,助你打造丝滑流畅的办公…...
考试技巧03:考场心态,紧张时代码写不出来怎么办?
考试时紧张是很正常的,但如果紧张到写不出代码,就会影响发挥。 今天我教你几个调节考场心态的方法,让你在考试时保持冷静,正常发挥。 考前准备 准备1:提前到达考场 建议:提前30分钟到达 理由: 避免匆忙,减少紧张感 有时间适应考场环境 可以深呼吸,平复心情 准备2…...
YOLO26改进95:全网首发--c3k2模块添加ESC模块
论文介绍 论文核心内容翻译 本文致力于解决轻量级图像超分辨率(SR)任务中Transformer模型的高计算开销问题。基于对自注意力机制层间重复性的观察,提出了一种卷积化自注意力模块——卷积注意力(ConvAttn),该模块通过单个共享大核和动态卷积核,模拟自注意力机制的远程建…...
【数据库】MySQL的安装与卸载
目录 一、卸载MySQL及清理残余文件 二、下载 MySQL 三、安装与配置 MySQL 一、卸载MySQL及清理残余文件 首先,我们要把之前安装的或者没安装成功的mysql及其相关环境配置清除。第一次安装mysql的,为确保顺利也跟着流程走一遍吧。 **第一步࿱…...
【AI应用出海】
AI应用出海 商品出海的成功案例通常涉及多方面的策略和技术支持。以下是一些典型案例: 案例1:跨境电商平台 某电商平台利用AI技术优化商品推荐和定价策略,通过分析海外用户行为数据,实现精准营销。该平台在东南亚市场增长迅速&…...
实证分析中的代理变量:理论基础与应用案例
温馨提示:若页面不能正常显示数学公式和代码,请阅读原文获得更好的阅读体验。 New! 搜推文,找资料,用 lianxh 命令: 安装: ssc install lianxh, replace 使用: lianxh 合成控制 …...
开源医疗系统如何驱动医疗机构数字化转型:OpenEMR全方案解析
开源医疗系统如何驱动医疗机构数字化转型:OpenEMR全方案解析 【免费下载链接】openemr The most popular open source electronic health records and medical practice management solution. 项目地址: https://gitcode.com/GitHub_Trending/op/openemr 在医…...
降AI后如何验证效果:免费检测渠道汇总与使用攻略
降AI后如何验证效果:免费检测渠道汇总与使用攻略 论文降AI做完了,然后呢?很多同学到这一步就直接提交了,结果学校检测出来AI率还是不合格。也有同学花了几十上百块去买检测报告,其实根本没必要。 降AI之后的验证环节不…...
Wan2.2-T2V-A5B在数字营销中的应用:自动化生成社交媒体短视频广告
Wan2.2-T2V-A5B在数字营销中的应用:自动化生成社交媒体短视频广告 如果你在数字营销团队工作,每天最头疼的事情是什么?我猜,十有八九是“内容不够用”。 尤其是短视频广告,创意、脚本、拍摄、剪辑……一套流程下来&a…...
