我试图学习Kotlin和我带了一个问题,同时使用函数。
fun main(args: Array<String>) {
println(max(20, 10))
}
fun max(a: Int, b: Int) = if (a > b) a else b我有一个函数麦克斯。现在,上述实现与函数MAX的实现之间是否有任何区别,尽管两者提供了相同的输出。
fun max(a: Int, b: Int): Int?{
if(a > b)
return a
else
return b
}发布于 2017-04-12 13:58:06
这两种功能有三个主要区别:
返回类型
科特林有可空类型和非空类型。Int可以在Kotlin代码中作为可空、Int?或非空、Int和JVM分别映射到Integer和int。
身体风格
Kotlin中的单表达式函数可以使用表达式体(相对于普通块体)更简洁地声明。以下代码生成相同的字节码:
表现性体裁
fun max(a: Int, b: Int) = if (a > b) a else b还可以显式声明返回类型:
fun max(a: Int, b: Int): Int = if (a > b) a else b块体式
fun max(a: Int, b: Int): Int {
return if (a > b) a else b
}字节码
第一个函数的字节码根据条件加载值,然后返回加载的值,而第二个函数的字节码声明两个块,每个块定义自己的加载和返回,从而生成更多的字节码。
L0
LINENUMBER 8 L0
ILOAD 0
ILOAD 1
IF_ICMPLE L1
ILOAD 0
GOTO L2
L1
ILOAD 1
L2
IRETURN与
L0
LINENUMBER 8 L0
ILOAD 0
ILOAD 1
IF_ICMPLE L1
L2
LINENUMBER 9 L2
ILOAD 0
IRETURN
L3
L1
LINENUMBER 11 L1
ILOAD 1
IRETURN发布于 2017-04-12 07:52:03
唯一的区别是返回类型:第一种情况是Int,第二种情况是Int?。
这种差异对你有两个方面的影响:
1)在第二种情况下使用max的代码无法知道它是否返回null,因此它必须每次检查(使用if-else或其他技术)。
2)第一种情况下的底层字节码(假设您使用JVM后端)使用原始的int,而不是装箱的Integer。这可以给你一个显著的性能提升。
https://stackoverflow.com/questions/43363161
复制相似问题