Kotlin新手教程二(Kotlin基本数据类型及基础语法)

news2024/9/24 5:30:48

一、基本数据类型

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的函数至少满足以下几点:

  1. 使用fun关键字修饰
  2. 需要函数名
  3. 函数体

具体集中写法如下:
1.无返回值函数(Unit函数)

fun myFun(){
     println("myFun")
   }

2.带有两个 Int 参数、返回 Int 的函数

fun myFun(a: Int, b: Int): Int {
    return a + b
}

3.匿名函数(lambda表达式)
匿名函数虽然没有名字,但是可以赋值给变量,这个变量的类型就是函数类型。和具名函数不一样,匿名函数通常不需要return关键字返回数据。匿名函数会隐式的或自动返回最后一行代码的执行结果。


fun main() {
    //声明一个匿名函数,并赋值给变量myFun
    val 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` 会导致编译错误,因为它们可能为 null
    if (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 <= 10
    println(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) 排除了 10
     println(i)
}

上一篇:Kotlin新手教程一(Kotlin简介及环境搭建)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言(输出scanf()函数)

一.概念带入 scanf()把输入的字符串转换成整数&#xff0c;浮点数&#xff0c;字符或字符串。而printf()正好与其相反&#xff0c;把整数&#xff0c;浮点数&#xff0c;字符和字符串转换成显示在屏幕上的文本。所以scanf&#xff08;&#xff09;在使用上面会和printf有很多一…

实验十四、共源放大电路的频率响应

一、题目 利用 Multisim 从下列两个方面研究图1所示电路的频率响应。图1共源放大电路图1\,\,共源放大电路图1共源放大电路&#xff08;1&#xff09;为改善低频特性&#xff0c;应增大三个耦合电容中的哪一个最有效。 &#xff08;2&#xff09;场效应管的漏极静态电流对上限频…

审批流、工作流、业务流

是业务流、工作流、审批流 业务流&#xff1a;即业务流程&#xff0c;指为了完成某项业务而进行的各种工作的有序组合 工作流&#xff1a;即工作流程&#xff0c;指为了完成某项工作而进行的各种动作的有序组合 审批流&#xff1a;即审批流程&#xff0c;是对某项工作的审批活动…

记录一次服务器被攻击的经历

突然收到阿里云发过来的异常登陆的信息&#xff1a; 于是&#xff0c;急忙打开电脑查看对应的ECS服务器的记录&#xff1a; 发现服务器的cpu占用率异常飙升&#xff0c;所以可以大概断定服务器已经被非法入侵了。 通过自己的账号登陆后&#xff0c;发现sshd服务有异常的链接存…

TensorRT的命令行程序

TensorRT的命令行程序 文章目录TensorRT的命令行程序A.3.1. trtexecA.3.1.1. Benchmarking NetworkA.3.1.2. Serialized Engine GenerationA.3.1.3. trtexecA.3.1.4. 常用的命令行标志点击此处加入NVIDIA开发者计划 A.3.1. trtexec 示例目录中包含一个名为trtexec的命令行包装…

关于表的操作+1 数据库(4)

素材&#xff1a; 学生表&#xff1a;Student (Sno, Sname, Ssex , Sage, Sdept) 学号&#xff0c;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;所在系 Sno为主键 课程表&#xff1a;Course (Cno, Cname) 课程号&#xff0c;课程名 Cno为主键 学生选课表&#xff1a;SC (…

常见的5大软件项目风险,如何进行规避?

1、客户没有或很少参与项目 日常项目开发中&#xff0c;容易出现这样的风险&#xff1a;客户在最开始的时候提交了一份文档&#xff0c;在项目启动、计划和执行阶段&#xff0c;客户没有参与&#xff0c;只是在项目收尾时进行验收&#xff0c;客户一旦发现开发结果与预期需求相…

第42天|LeetCode121. 买卖股票的最佳时机、LeetCode122. 买卖股票的最佳时机 II

1.题目链接&#xff1a;121. 买卖股票的最佳时机 题目描述&#xff1a; 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法…

C++类基础(十六)

类的继承——继承与特殊成员函数 ● 派生类合成的…… – 缺省构造函数会隐式调用基类的缺省构造函数 – 拷贝构造函数将隐式调用基类的拷贝构造函数 – 赋值函数将隐式调用基类的赋值函数 struct Base {Base(){std::cout << "Base()\n";}Base(const Base&…

重生之我是赏金猎人-SRC漏洞挖掘(五)-轻松GET某src soap注入

0x01 挖掘 在对某SRC测试时&#xff0c;本人根据其证书信息收集到了部分深度子域&#xff0c;并找到了其对应的业务IP段 写了个shell脚本ffuf批量fuzz某src c段资产目录 发现了xxSRC c段的一个提供了webservice的服务器 http://180.x.x.x/webservice/ 获取到接口 http://1…

全国计算机等级考试报名照片要求以及证件照制作教程

马上就全国计算机等级考试就要开始了&#xff0c;相信现在很多同学都在网上进行报名呢&#xff0c;报名的时候肯定需要用到个人证件照片&#xff0c;所以问题来了&#xff0c;我们怎么自己制作证件照片呢&#xff1f;计算机等级考试报名时对证件照都有哪些要求呢&#xff1f;该…

06 antdesign react Anchor 不同页面之间实现锚点

react Anchor 不同页面之间实现锚点一、定义二、使用步骤三、开发流程(一)、组件(二)、页面布局(三)、点击事件(四)、总结说明一、react单页面应用&#xff0c;当前页面的锚点二、react单页面应用&#xff0c;不同页面的锚点思路&#xff1a;锚点只能在当前页面使用&#xff0c…

central cache设计及实现

你好&#xff0c;我是安然无虞。 central cache 设计及实现 central cache 也是一个哈希桶结构, 而且它的哈希桶的映射关系跟 thread cache 是一样的, 不同的是 central cache 每个哈希桶位置上挂的是 SpanList 双向链表结构, 而且每个哈希桶下面的 span 中的大块内存被按映射…

大数据之数据中台

目录数据仓库传统数据仓库无法支撑互联网时代的商业智能数据埋点数据仓库 数据仓库是在企业管理和决策中面向主题的、集成的、与时间相关的、不可修改的数据集合。 在电商场景中&#xff0c;有一个数据库专门存放订单的数据&#xff0c;另外一个数据库存放会员相关的数据。构建…

订单服务:订单流程

订单流程 订单流程是指从订单产生到完成整个流转的过程&#xff0c;从而行程了一套标准流程规则。而不同的产品类型或业务类型在系统中的流程会千差万别&#xff0c;比如上面提到的线上实物订单和虚拟订单的流程&#xff0c;线上实物订单与 O2O 订单等&#xff0c;所以需要根据…

[Datawhale][CS224W]图机器学习(三)

目录一、简介与准备二、教程2.1 下载安装2.2 创建图2.2.1 常用图创建&#xff08;自定义图创建&#xff09;1.创建图对象2.添加图节点3.创建连接2.2.2 经典图结构1.全连接无向图2.全连接有向图3.环状图4.梯状图5.线性串珠图6.星状图7.轮辐图8.二项树2.2.3 栅格图1.二维矩形栅格…

如何修改 类名::静态变量?

好久没更新了&#xff0c;其中经历了备战省赛&#xff0c;重装电脑&#xff0c;换服务器&#xff0c;重新搭建博客等一系列事&#xff0c;受到许多技术大牛的指点&#xff0c;而且新人太厉害了&#xff0c;卷卷卷&#xff01; Geek Challenge 2021有一道BabyPOP&#xff0c;这…

vue写一个翻页的时间插件

读秒效果有一个从上向下的翻页效果 效果图 clock代码 <template><div class"dateClock"><div class"todayClass"><p class"datep">{{dateToday}}</p><span style"float:right;font-size:16px">…

基于 VPX 总线的工件台运动控制系统研究与开发-DSP+FPGA硬件架构(一)

作为光刻机核心单元之一&#xff0c;超精密工件台主要负责实现快速扫描、上下片、精密定位、调平调焦等功能。目前&#xff0c;较为成熟的方案大多采用 VME 并行总线架构来建立超精密工件台控制系统&#xff0c;由于随着系统性能要求的提升&#xff0c;VME 总线以及相应的处理器…

最大连续子列和

给定一个数组&#xff0c;求它的最大连续子列和。这个问题有四种解法。 1、暴力循环(O(n^3))分析这个问题&#xff0c;既然是子列&#xff0c;那么它最长为n&#xff0c;最短为1。要想求和我们一般需要知道这个子列的左端下标和右端下标&#xff0c;再求这个子列的和。最简单的…