gpt4 book ai didi

kotlin - 从 Double 到 Float 的类型转换会导致 ClassCastException

转载 作者:行者123 更新时间:2023-12-02 02:55:45 24 4
gpt4 key购买 nike

代码:-

val num = 12.12
val num2: Float = num.toFloat() // Works
val num3: Float = num as Float // Exception

异常(exception):-

Exception in thread "main" java.lang.ClassCastException: class java.lang.Double cannot be cast to class java.lang.Float (java.lang.Double and java.lang.Float are in module java.base of loader 'bootstrap')

谁能告诉我为什么 num.toFloat() 工作正常,但 num as Float 给出错误?这两种不同的语法不应该做同样的事情吗?

最佳答案

不,他们没有做同样的事情。

.toXxx() 方法将值从一种类型转换为另一种类型。这可以是关系较远的类型(例如 ListString),也可以是密切相关的类型(例如 IntFloat) ),但在所有情况下它们都是不同的类型,并且具有不同的值。

然而,

as 是一个强制转换强制转换不会将值转换为所需的类型;强制转换向编译器保证该值已经是所需的类型。如果不是,您会收到一个错误,正如您所发现的。

诸如 C 和 Java 之类的语言对数字类型相当宽松,并且在许多情况下会自动在它们之间进行转换(“数字提升”),这可能就是您混淆两者的原因。这可能相当方便;但它也可能导致微妙的错误。因此,Kotlin 所做的事情少得多,带来了额外的安全性(这是该语言的主题之一)。

(这种混淆似乎很常见;例如,参见 4 天前的 this question。)

关于kotlin - 从 Double 到 Float 的类型转换会导致 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61182762/

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