我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何解决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基本类型自动装箱出现的问题”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

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

怎么解决SpringBoot自动装配bean找不到类型的问题

这篇文章主要介绍“怎么解决SpringBoot自动装配bean找不到类型的问题”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么解决SpringBoot自动装配bean找不到类型的问题”文章能帮助大
2023-06-29

如何解决InternetExplorer9安装时出现的问题

要解决Internet Explorer 9安装时出现的问题,可以尝试以下方法:1. 检查系统要求:确保你的计算机符合Internet Explorer 9的系统要求。例如,你的操作系统是否为Windows 7或更高版本。2. 关闭防火墙和
2023-09-07

如何解决使用Python装饰器出现的问题

这篇文章主要讲解了“如何解决使用Python装饰器出现的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何解决使用Python装饰器出现的问题”吧!疑问首先我有一个这样的装饰器文件路径h
2023-06-16

如何解决win10老自动弹出反馈中心的问题

这篇文章将为大家详细讲解有关如何解决win10老自动弹出反馈中心的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、首先我们需要点击开始菜单,接着选择设置。2、在打开的设置界面中,点击系统。3、接着在
2023-06-10

如何解决win10安装软件出现乱码的问题

小编给大家分享一下如何解决win10安装软件出现乱码的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!win10安装软件出现乱码怎么办?近期,有的朋友反馈在新安
2023-06-10

win7重装系统时出现的蓝屏问题如何解决

不知道大家重装win7电脑时有没有出现过蓝屏的情况呢?如果你不知道怎么解决的话就看看下面的方法吧。1、开机一直按F2或(FN+F2)进入BIOS,按→方向键切换到Security,选择Secure Boot回车设置成Disabled。2、转
2023-07-10

如何解决tomcat启动ssm项目出现乱码的问题

这篇文章主要为大家展示了“如何解决tomcat启动ssm项目出现乱码的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决tomcat启动ssm项目出现乱码的问题”这篇文章吧。0、乱码产生
2023-06-29

如何解决安装php7及安装memcache扩展出现新旧php版本兼容问题

本篇内容主要讲解“如何解决安装php7及安装memcache扩展出现新旧php版本兼容问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决安装php7及安装memcache扩展出现新旧ph
2023-06-20

wlan适配器的驱动程序可能出现问题如何解决

本篇内容主要讲解“wlan适配器的驱动程序可能出现问题如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“wlan适配器的驱动程序可能出现问题如何解决”吧!方法一: 1、首先点击左下角的开始,
2023-07-02

如何解决电脑在重装过程中出现蓝屏的问题

这篇文章主要介绍了如何解决电脑在重装过程中出现蓝屏的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。解决办法:这是在安装系统时出现比较多的蓝屏画面,出现此问题的原因和我们在
2023-06-27

Win11更新自动安装旧版 AMD驱动导致特定软件出现问题的解决方法

近日,许多 Windows 11 用户反映,在使用某些软件时遇到了 AMD 显卡驱动不兼容的问http://www.cppcns.com题。据了解,这是由于 Windows 11 自动更新安装了旧版本的 AMD 显卡驱动,导致与当前的 AM
2023-05-30

安装Win8.1过程中出现的各种问题如何解决?制作U盘启动盘安装Win8.1

机子是6G内存、500G硬盘,原装系统是Windows 7,现在想换成Windows 8.1,于是下载了64位的Windows 8.1 ISO镜像文件,用DaemonTools打开,打开后如果直接点击setup.exe那么只会在你现在的系统
2022-06-04

一键重装Win10出现“你的电脑遇到问题,需要重新启动”如何解决

本文小编为大家详细介绍“一键重装Win10出现“你的电脑遇到问题,需要重新启动”如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“一键重装Win10出现“你的电脑遇到问题,需要重新启动”如何解决”文章能帮助大家解决疑惑,下面跟着小编的
2023-06-27

如何解决IDEA 2020.1 for Mac下载安装配置及出现的问题

小编给大家分享一下IDEA 2020.1 for Mac 下载安装配置及出现的问题小结,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!下载安装IDEA 2020.1
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录