ome/img/nav3_on.png">
APP
系统平台
  • 建站知识
  • 联系我们
  • 咨询热线 :
    028-86922220

    疆括仕网站建设,新征程启航

    为企业提供网站建设、域名注册、服务器等服务

    如何解决Kotlin基本类型自动装箱出现的问题

    这篇文章主要介绍如何解决Kotlin基本类型自动装箱出现的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

    创新互联公司专业为企业提供沙洋网站建设、沙洋做网站、沙洋网站设计、沙洋网站制作等企业网站建设、网页设计与制作、沙洋企业网站模板建站服务,10年沙洋做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

    Kotlin基本类型自动装箱出现问题解决办法

    问题

    在Kotlin官方文档介绍基本类型时,给我们说明了在有些情况下会对基本类型自动进行装箱操作。 但是具体是如何进行装箱,以及何时进行装箱缺没有提供详细介绍。只是提供了一个例子,如下:

    val a: Int = 10000
    print(a === a) // Prints 'true'
    val boxedA: Int? = a
    val anotherBoxedA: Int? = a
    print(boxedA === anotherBoxedA) // !!!Prints 'false'!!!

    对于上述代码,废了好大力气 写了好多demo才搞清楚。 接下来先通过几个简单的栗子来理解一下Kotlin是如何进行装箱操作的

    ####**第一个栗子**

    fun main(args: Array) {
     test1()
    }
    
    fun test1() {
     val i: Int = 1000
     println(i)
    }

    给大家提供一点技巧,在看不懂Kotlin是如何编译运行的情况下,我们可以先将其反编译成Java字节码,对于Java我们就驾轻就熟啦。具体做法就是 1 显示Kotlin的字节码 ![这里写图片描述](/upload/otherpic49/20171013135245711) 通过这种方法,将上面的test1()方法反编译之后得出如下字节码

    public static final void test1() {
      short i = 1000;
      System.out.println(i);
     }

    可以看出Kotlin编译器将 i 单纯的看做是一个基本类型short,并将其打印

    再举个栗子

    fun main(args: Array) {
     test2()
    }
    
    fun test2() {
     val i: Int? = 1000
     println(i)
    }

    看到test1和test2的区别了吗?? 在test2中多了一个 ?

    val i: Int? = 1000

    这个“`?“`代表的意思是这个i可以被赋值为null, 既然可以是null,那就不能是原始类型,只能是对象,因此Kotlin会自动的为其进行装箱操作。因此反编译test2之后,我们会得到如下字节码

     public static final void test2() {
      Integer i = Integer.valueOf(1000);
      System.out.println(i);
     }

    分析

    理解了上述两个小栗子之后,在回头看一下官方提供的demo,就可以理解了。我们不妨自己也写一个类似的代码

    fun test3() {
     //Kotlin并不会自动装箱
     val i: Int = 1000
    
     println(i)
    
     //因为j和k都被当做对象操作,因此会将i进行装箱做操,然后复制给j、k
     val j: Int? = i
     val k: Int? = i
    
     println(j === k)
    }

    反编译成java字节码之后结果同我们猜想的一致:

    public static final void test3() {
      short i = 1000;
      System.out.println(i);
      Integer j = Integer.valueOf(i);
      Integer k = Integer.valueOf(i);
      boolean var3 = j == k;
      System.out.println(var3);
    }

    以上是“如何解决Kotlin基本类型自动装箱出现的问题”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!


    本文标题:如何解决Kotlin基本类型自动装箱出现的问题
    网址分享:https://www.tyhkzb.com/article/gogpcc.html
    在线咨询
    服务热线
    服务热线:028-86922220
    TOP