Java Integer.MAX_VALUE vs Kotlin Int.MAX_VALUE

2022-09-04 22:18:46

我注意到,一件有趣的事情。
Java是(2147483647)
Kotlin的,
但如果你用Java编写


在Kotlin中:Integer.MAX_VALUE0x7fffffffInt.MAX_VALUE2147483647int value = 0xFFFFFFFF; //everything is fine (but printed value is '-1')
val value: Int = 0xFFFFFFFF //You get exception The integer literal does not conform to the expected type Int

有趣吧?所以你可以在Java中做一些类似的事情,但不能在Kotlin中做。new java.awt.Color(0xFFFFFFFF, true)

Color类在“二进制”级别上与该int一起工作,因此对于具有所有构造函数(或)的两个平台,一切都可以正常工作。
我为kotlin找到的唯一解决方法是。Color(int rgba)Color(int r, int g, int b, int a)java.awt.Color(0xFFFFFFFF.toInt(), true)

任何想法为什么在Kotlin中是这样的?


答案 1

这里部分回答了这个问题

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

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

否定必须手动完成。

小题外话:JetBrains 的 Kotlin 转换器实际上可以转换

int a = 0xffffffff;

var a = -0x1

但这可能只是它意识到你所注意到的。


但是,十六进制文本的规范部分根本没有提到这一点。


答案 2

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


推荐