Kotlin 从Double到Float的类型转换导致ClassCastException
代码:-Kotlin 从Double到Float的类型转换导致ClassCastException,kotlin,Kotlin,代码:- val num = 12.12 val num2: Float = num.toFloat() // Works val num3: Float = num as Float // Exception 例外情况:- 线程“main”java.lang.ClassCastException中的异常:无法将类java.lang.Double转换为类java.lang.Float(java.lang.Double和java.lang.Float位于加载程序“引导”的模块java.base中
val num = 12.12
val num2: Float = num.toFloat() // Works
val num3: Float = num as Float // Exception
例外情况:-
线程“main”java.lang.ClassCastException中的异常:无法将类java.lang.Double转换为类java.lang.Float(java.lang.Double和java.lang.Float位于加载程序“引导”的模块java.base中)
有人能告诉我为什么
num.toFloat()
工作正常,但是numas Float
给出了一个错误吗?这两种不同的语法不是应该做相同的事情吗?不,它们做的事情不同
.toXxx()
方法将一个值从一种类型转换为另一种类型。这可以是远亲类型(例如列表
到字符串
),也可以是近亲类型(例如Int
到浮点
),但在所有情况下,它们都是不同的类型,并且具有不同的值
as
是强制转换。强制转换不会将值转换为所需类型;强制转换向编译器保证该值已经是所需的类型。如果不是,就会发现一个错误
像C和Java这样的语言对数字类型相当宽松,在许多情况下会自动在它们之间转换(“数字升级”),这可能就是为什么你会混淆两者的原因;但是它也会导致一些微妙的错误,所以Kotlin做的要少得多,带来了额外的安全性(这是该语言的主题之一)
(这种混淆似乎很常见;例如,从4天前开始。)不,他们没有做同样的事情
.toXxx()
方法将一个值从一种类型转换为另一种类型。这可以是远亲类型(例如列表
到字符串
),也可以是近亲类型(例如Int
到浮点
),但在所有情况下,它们都是不同的类型,并且具有不同的值
as
是强制转换。强制转换不会将值转换为所需类型;强制转换向编译器保证该值已经是所需的类型。如果不是,就会发现一个错误
像C和Java这样的语言对数字类型相当宽松,在许多情况下会自动在它们之间转换(“数字升级”),这可能就是为什么你会混淆两者的原因;但是它也会导致一些微妙的错误,所以Kotlin做的要少得多,带来了额外的安全性(这是该语言的主题之一)
(这种混淆似乎很常见;例如,从4天前开始。)如果在编译时已经知道它是什么类型的变量,那么
作为
强制转换有什么用?@parakadam有时你知道编译器不知道的事情。(虽然不像人们想象的那么频繁,IME…)在那些情况下,如果你能确定演员阵容不会失败,那么它可能会很有用。(然而,Kotlin的safe castas?
运算符使“不可能”更容易处理,通常是更好的选择。)如果在编译时已经知道它是什么类型的变量,那么as
cast还有什么用?@ParagKadam有时你知道编译器不知道的事情。(虽然不像人们想象的那么频繁,IME…)在那些情况下,如果你能确定演员阵容不会失败,那么它可能会很有用。(然而,Kotlin的safe castas?
操作符使“不可能”更容易处理,通常是更好的选择。)