在Java里,我们一般可以这样给View设置颜色值:

        textView1.setTextColor(0x333333);
        textView2.setTextColor(0xff333333);

这个时候如果你使用java转kotlin,得到的结果是:

        textView1!!.setTextColor(0x333333)
        textView2!!.setTextColor(-0xcccccd)

竟然多了一个负数!!!

原因是带透明度的色值形式,如0xff333333,在kotlin中属于Long类型,但是在Java中是Integer类型,这么使用的话编译器就会发生问题。

后面进一步试验,还发现了一些问题:

十六进制表示负数的问题

在Java中这么用是没问题的:

       int x = 0xff000000;
       int y = 0x80000000;

但是在kotlin中:

    val x:Int = 0x80000000
    val y:Int = 0xff000000

编译器是会报错的!!!

而Int的最小值就是0x80000000,竟然也不能直接表示。

看看源码中也是间接表示:

  • Int:
public const val MIN_VALUE: Int = -2147483648
  • Long
       public const val MIN_VALUE: Long = -9223372036854775807L - 1L

真的是一言难尽,一个字形容:坑!