Kotlin基本类型自动装箱的示例分析-创新互联
这篇文章主要为大家展示了“Kotlin基本类型自动装箱的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Kotlin基本类型自动装箱的示例分析”这篇文章吧。
十多年的铁岭县网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站的优势是能够根据用户设备显示端的尺寸不同,自动调整铁岭县建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“铁岭县网站设计”,“铁岭县网站推广”以来,每个客户项目都认真落实执行。问题
在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的字节码
2将Kotlin字节码反编译成Java字节码
通过这种方法,将上面的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基本类型自动装箱的示例分析-创新互联
文章网址:http://hbruida.cn/article/dsjjjs.html