返回顶部
首页 > 资讯 > 精选 >如何解决Kotlin基本类型自动装箱出现的问题
  • 489
分享到

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

kotlin 2023-05-31 00:05:36 489人浏览 薄情痞子
摘要

这篇文章主要介绍如何解决Kotlin基本类型自动装箱出现的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Kotlin基本类型自动装箱出现问题解决办法问题在Kotlin官方文档介绍基本类型时,给我们说明了在有些情况

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

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

问题

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

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

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

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

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

给大家提供一点技巧,在看不懂Kotlin是如何编译运行的情况下,我们可以先将其反编译成Java字节码,对于Java我们就驾轻就熟啦。具体做法就是 1 显示Kotlin的字节码 ![这里写图片描述](Http://img.blog.csdn.net/20171013135245711?watermark/2/text/aHR0cDovL2jsb2cuY3Nkbi5uZXQvenhtMzE3MTIyNjY3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 2 将Kotlin字节码反编译成Java字节码 ![这里写图片描述](http://img.blog.csdn.net/20171013135324119?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvenhtMzE3MTIyNjY3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 通过这种方法,将上面的test1()方法反编译之后得出如下字节码

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

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

再举个栗子

fun main(args: Array<String>) { 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基本类型自动装箱出现的问题”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

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

本文链接: https://lsjlt.com/news/222549.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 如何解决Kotlin基本类型自动装箱出现的问题
    这篇文章主要介绍如何解决Kotlin基本类型自动装箱出现的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Kotlin基本类型自动装箱出现问题解决办法问题在Kotlin官方文档介绍基本类型时,给我们说明了在有些情况...
    99+
    2023-05-31
    kotlin
  • 怎么解决SpringBoot自动装配bean找不到类型的问题
    这篇文章主要介绍“怎么解决SpringBoot自动装配bean找不到类型的问题”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么解决SpringBoot自动装配bean找不到类型的问题”文章能帮助大...
    99+
    2023-06-29
  • 如何解决InternetExplorer9安装时出现的问题
    要解决Internet Explorer 9安装时出现的问题,可以尝试以下方法:1. 检查系统要求:确保你的计算机符合Interne...
    99+
    2023-09-07
    Internet
  • windows10自动安装软件问题如何解决
    本篇内容主要讲解“windows10自动安装软件问题如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“windows10自动安装软件问题如何解决”吧!解决方法点击电脑开始,再点击设置。 进入...
    99+
    2023-07-04
  • 如何解决MySQL安装ODBC驱动出现126错误的问题
    这篇文章主要介绍了如何解决MySQL安装ODBC驱动出现126错误的问题,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。MySQL安装ODBC驱动...
    99+
    2024-04-02
  • MYSQL本地安装以及出现的问题解决
    前言 本文写得还是比较详细,甚至有些繁琐,有很多步骤在其他的教程文档里都是省略掉的,但是我还是要写出来,因为我当时走了很多弯路,我希望你们能够避免我走的这些弯路。当然,知道同学的可以略过,选择你想知道的地方...
    99+
    2024-04-02
  • 【Flutter】Flutter 实现 Text 自动换行 解决长文本溢出问题
    文章目录 一、前言二、Flutter Text 组件简介三、Flutter Text 自动换行的重要性四、Flutter Text 自动换行的实现五、Flutter Text 自动换行的高级应...
    99+
    2023-09-23
    flutter javascript 前端 原力计划
  • 如何解决使用Python装饰器出现的问题
    这篇文章主要讲解了“如何解决使用Python装饰器出现的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何解决使用Python装饰器出现的问题”吧!疑问首先我有一个这样的装饰器文件路径h...
    99+
    2023-06-16
  • 如何解决win10老自动弹出反馈中心的问题
    这篇文章将为大家详细讲解有关如何解决win10老自动弹出反馈中心的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。首先我们需要点击开始菜单,接着选择设置。在打开的设置界面中,点击系统。接着在系统界面中,...
    99+
    2023-06-10
  • Java项目中出现自动拆箱空指针异常如何解决
    本篇文章给大家分享的是有关Java项目中出现自动拆箱空指针异常如何解决,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java的特点有哪些Java的特点有哪些1.Java语言作为...
    99+
    2023-06-06
  • mybatis使用Integer类型查询出现的问题怎么解决
    本文小编为大家详细介绍“mybatis使用Integer类型查询出现的问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“mybatis使用Integer类型查询出现的问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入...
    99+
    2023-06-29
  • 如何解决win10安装软件出现乱码的问题
    小编给大家分享一下如何解决win10安装软件出现乱码的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!win10安装软件出现乱码怎么办?近期,有的朋友反馈在新安...
    99+
    2023-06-10
  • 如何解决安装oracle软件出现PRVF-4354问题
    本篇内容主要讲解“如何解决安装oracle软件出现PRVF-4354问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决安装oracle软件出现PRVF-...
    99+
    2024-04-02
  • 如何解决PIP安装python包出现超时问题
    这篇文章给大家分享的是有关如何解决PIP安装python包出现超时问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。我们在使用pip默认源进行模块安装时,经常会超时问题导致不能下载。如图所示:  下面是...
    99+
    2023-06-14
  • 在pytorch中复制模型时出现问题如何解决
    在pytorch中复制模型时出现问题如何解决?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。直接使用model2=model1会出现当更新model2时,model1的权重也...
    99+
    2023-06-06
  • 如何解决电脑自动关机的问题
    这篇文章主要为大家展示了“如何解决电脑自动关机的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决电脑自动关机的问题”这篇文章吧。造成自动关机的原因主要有以下几个:CPU过热:不论是笔记...
    99+
    2023-06-28
  • 如何解决写接口出现的问题
    这篇文章主要介绍“如何解决写接口出现的问题”,在日常操作中,相信很多人在如何解决写接口出现的问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何解决写接口出现的问题”的疑惑...
    99+
    2024-04-02
  • 如何解决CentOS MAKE中出现的问题
    如何解决CentOS MAKE中出现的问题,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在CentOS MAKE的使用中会出现很多的问题,这次,我就碰到了CentOS MA...
    99+
    2023-06-16
  • 如何解决mysql的int型主键自增问题
    这篇文章主要介绍“如何解决mysql的int型主键自增问题”,在日常操作中,相信很多人在如何解决mysql的int型主键自增问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何解决mysql的int型主键自...
    99+
    2023-06-20
  • 如何解决MySQL8.0出现服务无法启动3534的问题
    小编给大家分享一下如何解决MySQL8.0出现服务无法启动3534的问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!MySQL8.0 服务无法启动最近遇到的在cmd启动MySQL服务的时...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作