我是靠谱客的博主 俏皮戒指,最近开发中收集的这篇文章主要介绍Kotlin中Int和 Int? 以及 IntArray 和 Array的问题开篇案例抽死剥茧触类盘通Kotlin 空字符串null or empty的判断,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
开篇
之前文章中提到过,kotlin
的形参如果不加?那么会默认为不为空。
这个小知识点在 kotlin
编译的时候其实很有用的,我们拿java中的 int
和 Integer
来举例。Integer
是int
的包装类型,比 int
更浪费资源,最为一个优秀的 coder
,肯定希望在范围允许内使用int
而不是Integer
。
案例
我们来看看2个方法
fun myList(vararg inner: Int) {
println(inner.size)
}
fun myList2(vararg inner2: Int?) {
println(inner2.size)
}
上述2个方法的区别其实只在于 Int后面有没有?
号。
我们要不先看看反编译的代码中重要的部分
public final class VarargThinkKt {
public static final void myList(@NotNull int... inner) {
//.....
}
public static final void myList2(@NotNull Integer... inner2) {
//.....
}
}
大家仔细看形参的签名
myList
是int... inner
myList2
是Integer ...inner2
大家可以思考kotlin
编译器为何如此编译了?
其实根本的原因就是?
,即可为空。
当kotlin
编译器认为形参不可为空的时候,完全可以用非包装
的类型来接受参数,更合理的利用资源。
抽死剥茧
我们通过例子来看看如何使用的问题
fun myList(vararg inner: Int) {
println(inner.size)
}
fun myList2(vararg inner2: Int?) {
println(inner2.size)
}
fun main() {
val intArrayOf = intArrayOf(1, 3, 4)
//注意这里的 null
val array = arrayOf(1, 3, 4, null)
myList(*intArrayOf)
myList(1, 2, 3)
myList2(*array)
myList2(1, 2, 3)
}
上述代码需要注意的是:
- 申明
Int
类型的数组,kotin
提供了2个方法,一个是intArrayOf()
,一个是arrayOf()
; intArrayOf
强调的是int
,类似 java中的int[]
,所以其中的参数不可为null
arrayOf
类似 java 中的Integer[]
,所以可以在其中赋值null
kotlin
中数组不能直接赋值给可变形参vararg
,需要通过关键字*
- 反思下,当我们创建
array
的时候,如果不需要null
,是不是用intArray
更优秀了?
触类盘通
有 intArrayOf
,那么也应该有longArrayOf
啦
同时Java8
的 Stream
下也有类似的设计,我们看看这个东西
@FunctionalInterface
public interface IntConsumer {
void accept(int value);
}
@FunctionalInterface
public interface IntFunction<R> {
R apply(int value);
}
上述的思路其实都是一致的,代码最优。
Kotlin 空字符串null or empty的判断
Error的地方连编译都通不过
举例:
val grantResults: IntArray? = null
println("${grantResults?.size} ${grantResults?.isEmpty()}")
输出:
null null
var s: String? = ""
var str: String = s ?: "bb"
println("str:$str")
println("str:${s?.length ?: "bb"}")
输出:
str:
str:0
var s: String? = null
var str: String = s ?: "bb"
println("str:$str")
println("str:${s?.length ?: "bb"}")
输出:
str:bb
str:bb
var s: String? = ""
var str: String = if (s.isNullOrEmpty()) "bb" else s
println("str:$str")
println("str:${s?.length ?: "bb"}")
输出:
str:bb
str:0
var s: String? = null
var str: String = if (s.isNullOrEmpty()) "bb" else s
println("str:$str")
println("str:${s?.length ?: "bb"}")
输出:
str:bb
str:bb
最后
以上就是俏皮戒指为你收集整理的Kotlin中Int和 Int? 以及 IntArray 和 Array的问题开篇案例抽死剥茧触类盘通Kotlin 空字符串null or empty的判断的全部内容,希望文章能够帮你解决Kotlin中Int和 Int? 以及 IntArray 和 Array的问题开篇案例抽死剥茧触类盘通Kotlin 空字符串null or empty的判断所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复