gpt4 book ai didi

casting - 为什么 Kotlin 不执行自动类型转换?

转载 作者:IT老高 更新时间:2023-10-28 13:46:51 25 4
gpt4 key购买 nike

var a : Double
a = Math.sin(10) // error: the integer literal does not conform to the expected type Double
a = Math.sin(10.0) //This compiles successfully
println(a)

为什么 kotlin 不进行隐式类型转换,强制我们传递确切类型的数据?

fun sin(value: Double): Double // at kotlin documentation

最佳答案

我们都知道 Kotlin 既有不可为空的 Int 也有可以为空的 Int?

当我们使用 Int? 时,会发生这种情况:当 Kotlin 需要一个可空引用时,Kotlin 实际上会“装箱”JVM 原语,因为它旨在消除代码中空引用的危险。

现在看看这个:(假设这是一个可编译的代码)

val a: Int? = 1
val b: Long? = a

Kotlin 不执行隐式类型转换,因为这件事发生了。如果 Kotlin 进行了隐式类型转换,则 b 应该是 1。但由于 a 是盒装 Intb 是盒装 Longa = = b 产生 false 并陷入矛盾,因为它的 == 运算符检查 equals()Longequals() 也检查其他部分是否为 Long

查看文档:

关于casting - 为什么 Kotlin 不执行自动类型转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44081233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com