kotlin 中的? :: !! 符号
程序员文章站
2024-03-20 22:19:22
...
kotlin中的各种符号学习
- ?加在变量之后,系统任何情况都不会抱他的空指针异常。意思就是允许该变量值为null。
- !! 加在变量之后,如果对象为空,则会报异常。等同于java。
- ?: A ?: B 如果A 的值为空,则会返回B。
- :: 表示把一个方法当做一个参数,传递到另一个方法中进行使用。即引用一个方法。 详情参考: https://blog.csdn.net/lv_fq/article/details/72869124
- ->
- ==比较值大小,===比较对象地址。装箱之后,数值相等,但是地址可能已经不同了。不一定保留同一性。注意是可能。含特殊情况。
示列1
fun main(args: Array<String>) {
val a : Int = 1000
println(a == a) //true 单纯比较数值大小
println(a === a) //true //同一对象
val a1 : Int = a
val a2 : Int = a
println(a1 == a2) //true 数值大小
println(a1 === a2) //true 同一对象和数值比较
}
示列2
fun main(args: Array<String>) {
val a : Int = 1000
println(a == a) //true
println(a === a) //true
val a1 : Int? = a
val a2 : Int? = a
println(a1 == a2) //true
println(a1 === a2) //false 之所以为false,因为经过了装箱
}
示列3
fun main(args: Array<String>) {
val a : Int? = 1000
println(a == a) //true
println(a === a) //true
val a1 : Int? = a //a经过装箱之后本身已经是一个对象此时a是一个对象
val a2 : Int? = a
println(a1 == a2) //true
println(a1 === a2) //true 此时a1 a2 同时指向了同一个对象a
}
示列4
fun main(args: Array<String>) {
val a : Int = 100 //和上面不一样,a的值发生了变化
println(a == a) //true
println(a === a) //true
val a1 : Int? = a
val a2 : Int? = a
println(a1 == a2) //true
println(a1 === a2) //true 之所以不变是因为和java一样,[-128,127]之间的数装箱并不会产生创建新的对象。
}
补充说明下:(引用下官方文档话术)
kotlin中的所有东西都是对象。数字在java平台是物理存储为jvm的原生类型,但是除非我们需要一个可空的引用,打个比方 Int? 或者泛型。这样的情况下会把数字进行装箱。
数字装箱不一定保留同一性, 就是因为 -128到127 之间, 是从IntegerCache.cache中拿取的,而不是该范围则是每次创建一个Integer对象。kotlin中关于新建Integer对象源码如下:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
上一篇: C++11中内联函数(inline)
下一篇: 微服务架构
推荐阅读
-
Kotlin:关于关联module时,无法找到库中jar的方法
-
kotlin 中的? :: !! 符号
-
Kotlin中写静态方法
-
前端将el-table中的数据导出成excel文件
-
springboot框架中-java实现Excel、csv、txt 文件的批量导出数据-亲手实测(二)-csv & txt
-
VS2010 MFC多文档中的工具栏CMFCToolBar停靠的问题
-
MyBatis中根据用户名实现模糊查询(${}和#{}的区别)
-
MFC中单文档和多文档的工具栏停靠问题
-
关于JSP中的%@include%指令与jsp:include标签的区别
-
解决php include中绝对路径与相对路径的问题