Java Integer.MAX_VALUE与Kotlin Int.MAX_VALUE

Kik*_*kju 8 java kotlin

我注意到,有一件有趣的事情.
Java Integer.MAX_VALUE0x7fffffff(2147483647)
Kotlin Int.MAX_VALUE是,2147483647
但如果你用
Java 写:
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

有意思吗?所以你可以new java.awt.Color(0xFFFFFFFF, true)用Java 做一些事,但不能用Kotlin做.

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

知道Kotlin为什么会这样?

Moi*_*ira 5

这是部分答案在这里:

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

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

否定必须手动完成.

小一点:JetBrains的Kotlin转换器实际上转换

int a = 0xffffffff;
Run Code Online (Sandbox Code Playgroud)

var a = -0x1
Run Code Online (Sandbox Code Playgroud)

但这可能只是它真正意识到你注意到了什么.


TODO但是,十六进制文字的规范(溢出行为)的这一特定部分被标记为,因此没有官方规范(尚未).


Kik*_*kju 3

我认为,这个问题应该由Kotlin 1.3解决,并UInt 在此处查看更多内容:https ://kotlinlang.org/docs/reference/whatsnew13.html#unsigned-integers