我注意到,有一件有趣的事情.
Java Integer.MAX_VALUE是0x7fffffff(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为什么会这样?
这是部分答案在这里:
在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但是,十六进制文字的规范(溢出行为)的这一特定部分被标记为,因此没有官方规范(尚未).
我认为,这个问题应该由Kotlin 1.3解决,并UInt
在此处查看更多内容:https ://kotlinlang.org/docs/reference/whatsnew13.html#unsigned-integers
| 归档时间: |
|
| 查看次数: |
3854 次 |
| 最近记录: |