如何比较Kotlin中的Short和Int?
我有一个如何比较Kotlin中的Short和Int?,kotlin,Kotlin,我有一个Short变量,需要检查其值。但编译器抱怨说,当我执行简单的等于检查时,运算符“==”不能应用于“Short”和“Int”: val myShort: Short = 4 if (myShort == 4) // <-- ERROR println("all is well") 下一个是int(不需要,现在我有两个int,而实际上我不需要任何int) 基本上,将其与小常量进行比较的“最干净”方法是myShort==4.toShort() 但是,如果要将
Short
变量,需要检查其值。但编译器抱怨说,当我执行简单的等于检查时,运算符“==”不能应用于“Short”和“Int”
:
val myShort: Short = 4
if (myShort == 4) // <-- ERROR
println("all is well")
下一个是int(不需要,现在我有两个int,而实际上我不需要任何int)
基本上,将其与小常量进行比较的“最干净”方法是
myShort==4.toShort()
但是,如果要将Short
与更宽的类型变量进行比较,请转换myShort
以避免溢出:myShort.toInt()==someInt
看起来很奇怪,调用一个基元数上的函数
val myShort: Short = 4
if (myShort == 4.toShort())
println("all is well")
但它实际上并不调用函数,它们被内部化并编译成字节码,字节码以JVM自然的方式操作数字,例如,myShort==4.toShort()的字节码是:
ILOAD 2 // loads myShort
ICONST_4 // pushes int constant 4
I2S // converts the int to short 4
IF_ICMPNE L3 // compares the two shorts
另请参见:.它实际上并没有调用.toShort()函数
,尽管如此,看到4.toShort()
将有一些时间来适应……@gromit190,4因为短
将不起作用,请参见我引用的Q&A解释:(删除我以前的评论)是的,你完全正确。谢谢
ILOAD 2 // loads myShort
ICONST_4 // pushes int constant 4
I2S // converts the int to short 4
IF_ICMPNE L3 // compares the two shorts