如何在Kotlin中比较Short和Int?

时间:2017-11-14 15:18:29

标签: kotlin

我有一个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")

1 个答案:

答案 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

另请参阅:another Q&A concerning numeric conversions