我有一个Short
变量,我需要检查它的值。但是当我做一个简单的等于检查时,编译器会抱怨Operator '==' cannot be applied to 'Short' and 'Int'
:
val myShort: Short = 4
if (myShort == 4) // <-- ERROR
println("all is well")
那么最简单的,最干净的&#34;&#34;这样做的方法等于检查?
以下是我尝试的一些事情(说实话,我都不喜欢)。
第一个将4整数强制转换为short(看起来很奇怪,在原始数字上调用函数)
val myShort: Short = 4
if (myShort == 4.toShort())
println("all is well")
下一个将短片投射到一个int(不应该是必要的,现在我有两个整数,当我不应该真的需要时)
val myShort: Short = 4
if (myShort.toInt() == 4)
println("all is well")
答案 0 :(得分:5)
基本上,最干净的&#39;将它与小常数进行比较的方法是myShort == 4.toShort()
。
但是,如果您想将Short
与更宽类型的变量进行比较,请转换myShort
以避免溢出:myShort.toInt() == someInt
。
看起来很奇怪,在原始数字上调用一个函数
但它实际上并没有调用函数,它们是内部化的并且编译为字节码,以对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