Java Integer.MAX_VALUE与Kotlin Int.MAX_VALUE

时间:2017-11-23 20:19:44

标签: java kotlin

我注意到了一件有趣的事 Java Integer.MAX_VALUE0x7fffffff(2147483647)
Kotlin的Int.MAX_VALUE2147483647
但如果你写了 在爪哇:
int value = 0xFFFFFFFF; //everything is fine (but printed value is '-1')
在Kotlin:
val value: Int = 0xFFFFFFFF //You get exception The integer literal does not conform to the expected type Int

有趣吗?因此,您可以在Java中执行类似new java.awt.Color(0xFFFFFFFF, true)的操作,但在Kotlin中执行

Color类在"二进制"上使用该int。等级,所以一切都适用于所有构造函数(Color(int rgba)Color(int r, int g, int b, int a))的平台 我在kotlin找到的解决方法只有java.awt.Color(0xFFFFFFFF.toInt(), true)

知道Kotlin为什么会这样?

3 个答案:

答案 0 :(得分:5)

部分回答here

  

在Kotlin中,您需要在-符号前面加上表示负面的Int,这在Java中是不正确的。

因此,似乎Java会将十六进制文字解释为signed,而Kotlin会将它们视为无符号。

否定必须手动完成。

小旁白:JetBrains的Kotlin转换器实际上转换了

int a = 0xffffffff;

var a = -0x1

但这可能只是意识到你已经注意到了什么。

This particular part of the spec (overflow behavior) for hexadecimal literals被标记为TODO,因此目前还没有官方规范(尚未)。

答案 1 :(得分:2)

我认为,应该通过 Kotlin 1.3 UInt解决此问题 在此处查看更多信息:https://kotlinlang.org/docs/reference/whatsnew13.html#unsigned-integers

答案 2 :(得分:0)

解释在reference docs

  

由于表示不同,较小的类型不是子类型   更大的。如果是的话,我们会遇到以下问题   分类:

gradle.properties
     

因此,不仅身份,甚至平等都会默默地失去   到处都是。

     

因此,较小的类型不会隐式转换为更大的类型   类型。这意味着我们不能将类型Byte的值赋给Int   没有显式转换的变量。