Kotlin
------《Kotlin系列之?、?:、!!、:: 特殊符号》
符号一:?
符号二:?.
符号三:!!
符号四:?:
符号五:::
符号六:===
符号七:..
符号八:``
符号九:$
符号十:@
符号一:?
声明一个变量可为空。
var userData : UserData? = null
1
符号二:?.
表示这个变量可以为null。该变量如果为null时,不会执行该变量后面的逻辑,也不会抛出空指针异常,俗称空安全。如果不为null,会正常执行该变量后面的内容。
UserData?.name
1
符号三:!!
非空断言运算符
加在变量后面,表示该变量如果为null时,会抛出空指针异常,像java语法一样空指针不安全;如果不为null,才会正常执行该变量后面的内容。
UserData!!.name
1
符号四:?:
Elvis操作符:
A ?: B 如果A 的值为空,则会返回B。一般不推荐用!!,建议使用?:来规避崩溃、报错的发生
println(UserData ?: "当UserData为空时执行")
1
符号五:::
Kotlin 中 双冒号操作符
表示把一个方法当做一个参数,传递到另一个方法中进行使用,通俗的来讲就是引用一个方法。
class ColonMagic {
fun main(msg: Array<String>) {
//调用peopleDo方法,并传入参数 “I say !” 和 say方法体
//此处 ::say 是将say方法作为参数传入peopleDo方法
//此处只是将say作为参数,而不会调用say方法,也就不会println(message),不会输出日志
peopleDo("I say !", ::say)
}
/**
* 一个参数
* message:String类型
*/
private fun say(message: String) {
println(message)
}
/**
* 两个参数
* msg: String类型
* dosay: (String) -> Unit 一个参数为String不需要返回值的方法体
*/
private fun peopleDo(msg: String, doSay: (String) -> Unit) {
//doSay(msg)调用的就是传入的say方法,即say(msg),只不过参数名是doSay本质是say方法
//此处打印出来 I say ! 日志
doSay(msg)
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
符号六:===
=就是赋值,
== 相当于Java中的equls()用于比较对象的结构(内容)是否相等(对象的结构就是属性和方法),
=== 用于比较对象的引用是否指向同一个对象,运行时如果是基本数据类型===等价于==
符号七:…
range表达式 表示多少到多少之间
if(num in 10..100)//表示10..100 表示 10到100
1
符号八:``
反引号
1、Kotlin中可以用反引号解决关键字冲突问题
2、将一个不合法的字符变为合法字符,这种情况一般可以用在一个Kotlin方法不希望被Java调用时使用,因为Java语言层面上不支持反引号这种语法。
fun `is`(){
//用is这种关键字去命名函数
}
fun `哈哈哈哈`(){
//用中文这种不合法字符去命名函数
}
1
2
3
4
5
6
7
符号九:$
拼接符号
"货号 ${data.code}" //将data.code值拼接到货号后
//相当于java中
"货号" + data.code
1
2
3
符号十:@
1、限定this的类型
class User {
inner class State{
fun getUser(): User{
//返回User
return this@User
}
fun getState(): State{
//返回State
return this@State
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
2、跳转到指定标签处,可以直接跳出多层循环。像汇编语言中的Loop
loop@ for (itemA in arraysA) { //直接跳出双循环
var i : Int = 0
for (itemB in arraysB) {
i++
if (itemB > 2) {
break@loop
}
println("itemB:$itemB")
}
}```
————————————————
版权声明:本文为CSDN博主「小孟来码」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45112340/article/details/126856001
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端