kotlin 中的数字

以下均来自官方文档:

一、整数类型

1、kotlin中内置的整数类型,有四种不同大小的类型:

类型存储大小(比特数)最小值最大值
Byte8-128127
Short16-3276832767
Int32-2,147,483,648 (-231)2,147,483,647 (231 - 1)
Long64-9,223,372,036,854,775,808 (-263)9,223,372,036,854,775,807 (263 - 1)

注:

当初始化一个没有显示指定类型的变量时,编译器会自动推断为自Int起足以表示该值的最小类型。意思是:如果不超过Int范围,那么类型为Int,如果超过了,那么类型是Long。如果指定值类型为Long类型,请给该值追加后缀L。如果显示的指定类型,会触发编译器检测该值是否超过指定类型的范围。

2、代码演示

// val或var来定义a = 1,打印类型,默认为java的int类型
fun main() {val a = 1// Kotlin的类型信息在运行时是基于JVM的,所以可以利用Java的反射API来获取类型信息println("类型为: ${a.javaClass.simpleName}") // 类型为: int
}

输出结果: 

 

// 下边打印输出类型为long类型,因为类型推断超出Int类型,所以输出long类型
fun main() {val a = 10000000000000println("类型为: ${a.javaClass.simpleName}") // 类型为: long
}

输出结果: 

显示指定Long类型

// 值后边加上L,来显示指定Long类型,或者 定义Long类型
fun main() {val a = 100Lval b: Long = 100println("类型为: ${a.javaClass.simpleName}") // 类型为: longprintln("类型为: ${b.javaClass.simpleName}") // 类型为: long
}

二、浮点类型

1、kotlin中内置的浮点类型:单精度Float与双精度Double类型

这两个类型的大小不同,并为两种不同精度的浮点数提供存储:

类型大小(比特数)有效数字比特数指数比特数十进制位数
Float322486-7
Double64531115-16

可以使用带小数部分的数字初始化Double与Float变量。小数部分与整数部分之间用点 .  分割,对于以小数初始化的变量,编译器会自动推断为Double类型:

fun main() {val a = 100.1println("类型为: ${a.javaClass.simpleName}") // 类型为: double
}

如果需要将一个值显式指定为Float类型,请添加 f F 后缀。如果值包含多于6到7位十进制数,那么会将其四舍五入:

// 实际测试Float类型多于4到5位十进制数,都会四舍五入,不知为啥!
fun main() {val a = 100.31415966 // 默认推断Double类型val b = 100.3141596f // 指定Float类型println("a为: ${a}") // a为: 100.31415966println("b为: ${b}") // b为: 100.31416
}

三、数字的装箱拆箱

1、在jvm平台,数字的存储为原生类型 int、double等。有例外的情况是:当创建可空数字引用如:泛型、Int? ···。在这些场景中,数字会装箱为JAVA类 Integer、Double等。

解释一下:在java世界里,有两种存放数字的方式:
(1)直接存储数字(原生类型):
        就像你在口袋里直接放了几块糖,你知道那是几块,可以直接用。在Java中,intdouble这些就是这种类型的糖,它们直接存数字,速度快,效率高。比如,你有个int num = 5;,这里的num就像你口袋里的5块糖,很直接。
(2)把数字放进盒子中,在存储(装箱类型):
        有时候,你可能想要更灵活一点,比如说,你的糖可能会没有(因为没买或者吃完了),这时候你就需要一个盒子来帮助你表示“有糖”或“没糖”。在Java中,如果你用IntegerDouble这样的类型,就像是给糖准备了个盒子。当你写Integer num = null;或用在泛型、可空类型如Int?时,就相当于,这个盒子里可能有糖(具体的数字),也可能什么都没有(null)。
装箱就是把简单直接的糖(原生类型)包装进一个盒子(变成对象,如Integer),这样可以做更多事情,比如表示“无糖状态”,但相对的,操作起来比直接拿糖要麻烦一点,因为每次要用糖时,都要从盒子里拿出来(拆箱)。
原生类型(如intdouble)直接存储数值,效率高;而像IntegerDouble这样的装箱类型,则是把数值包装成对象,可以表示额外的“无值”状态,但在使用时涉及到自动装箱和拆箱,稍微复杂一些。

2、代码演示

fun main() {val a: Int = 100// 装箱,赋值为可空的bval b: Int? = a// 装箱,赋值为可空的cval c: Int? = aval d: Int = 10000// 装箱,赋值为可空的eval e: Int? = d// 装箱,赋值为可空的fval f: Int? = dprintln(b === c) // trueprintln(e === f) // false
}

解释:

上边代码演示了装箱(boxing)和常量池(constant pool)的概念,这是理解打印结果差异的关键。
在Kotlin中,当一个原始类型(如Int)被赋值给一个可空类型(如Int?),这个过程被称为装箱,即原始类型值被封装成一个对象。但是,为了优化性能,Kotlin(以及Java)会对特定范围内的Int值(通常是-128到127)使用缓存,这意味着在这个范围内的值在装箱时会复用同一个对象。这就是所谓的享元模式(Flyweight Pattern),可以减少内存使用并提高效率。
分析代码:

  • 对于变量a,它的值是100,处于上述的缓存范围(-128到127)内。所以,当a被装箱赋值给bc时,这两个变量实际上引用的是同一个缓存中的Integer对象。因此,b === c比较的是两个对象的引用是否相同,结果为true,表示它们确实是同一个对象。

  • 变量d的值是10000,超出了常量池的缓存范围。因此,当d被装箱为e和f时,会为每个变量创建一个新的Integer对象,即使它们的值相同。这意味着ef是两个不同的对象,即使它们的数值相等。因此,e=== f比较的是不同对象的引用,结果为false

总结:

打印结果的不同是因为值为100的Int对象在装箱时被缓存并复用,而值为10000的Int对象由于超出缓存范围,每次装箱都会创建新的对象实例。这就解释了为什么第一个比较结果为true而第二个为false

再来看一段代码:

fun main() {val a: Int = 10000// 装箱,赋值为可空的bval b: Int? = a// 装箱,赋值为可空的cval c: Int? = aprintln(b == c) // true
}

为什么上边代码打印结果为true?

解释:

b == c打印出true的原因在于这里使用的是==操作符来进行比较,而不是===。在Kotlin中,==用于比较两个对象的内容(值)是否相等,而===用于比较两个引用是否指向同一个对象(即它们是否完全相同)。

分析代码:

当比较的是两个装箱的Int?类型变量(bc)时,==操作符会触发自动拆箱(unboxing),并将它们的原始Int值进行比较。在这个例子中,bc虽然是两个不同的对象(因为它们是分别装箱得到的),但它们的内部整数值都是10000,所以b == c的结果为true

总结:

b == c是比较的两个变量的值是否相等,而不是它们是否是同一个对象,所以结果是true

四、类型转换

1、数字类型的互转

  • toByte(): 转Byte类型 
  • toShort(): 转Short类型
  • toInt(): 转Int类型
  • toLong(): 转Long类型
  • toFloat(): 转Float类型
  • toDouble(): 转Double类型
fun main() {val a = 1 // 默认会推断为Int类型println(a.toByte()) // 1println(a.toInt()) // 1println(a.toFloat()) // 1.0println(a.toDouble()) // 1.0println(a.toLong()) // 1println(a.toShort()) // 1
}

五、大小比较及区间检测

1、kotlin中大小比较跟java一样

  • 相等性检测:a == b 与 a != b
  • 比较操作符:a < b、 a > b、 a <= b、 a >= b
  • 区间实例以及区间检测:a..b、 x in a..b、 x !in a..b

代码演示(.. 区间):

// a..b 表示从a到b这个区间
fun main() {for (i in 1..100){println(i) // 会打印1-100 的数字}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/26608.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

现货黄金交易多少克一手?国内外情况大不同

如果大家想参与国际市场上的现货黄金交易&#xff0c;就应该从它交易细则的入手&#xff0c;先彻底认识这个品种&#xff0c;因为它是来自欧美市场的投资方式&#xff0c;所以无论是从合约的计的单位&#xff0c;计价的货币&#xff0c;交易的具体时间&#xff0c;以及买卖过程…

【Python/Pytorch - 网络模型】-- 手把手搭建3D VGG感知损失模型

文章目录 文章目录 00 写在前面01 基于Pytorch版本的3D VGG代码02 论文下载 00 写在前面 感知损失&#xff1a;对于提升图片的肉眼可见细节&#xff0c;效果十分明显&#xff1b;对于一些指标如&#xff08;SSIM、PSNR&#xff09;这些&#xff0c;效果不明显。 在01中&…

springboot集成swagger、knife4j

1. 集成swagger2 1.1 引入依赖 <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</vers…

【Three.js】知识梳理十九:线性雾(Fog)、指数雾(FogExp2)和范围雾(RangeFog)

雾是3D图形中创建深度和氛围的重要工具。Three.js提供了多种类型的雾&#xff1a;线性雾&#xff08;THREE.Fog&#xff09;&#xff0c;指数雾&#xff08;THREE.FogExp2&#xff09;和范围雾&#xff08;RangeFog&#xff09;。本文将探讨这三种类型的雾&#xff0c;通过代码…

【大数据】Spark使用大全:下载安装、RDD操作、JAVA编程、SQL

目录 前言 1.下载安装 2.RDD操作 3.JAVA编程示例 4.Spark SQL 前言 本文是作者大数据系列中的一文&#xff0c;专栏地址&#xff1a; https://blog.csdn.net/joker_zjn/category_12631789.html?spm1001.2014.3001.5482 该系列会成体系的聊一聊整个大数据的技术栈&…

stable-diffusion 3 体验部署流程(ComfyUI)

环境准备 下载及简介 git clone https://huggingface.co/stabilityai/stable-diffusion-3-medium SD3 checkpoints&#xff1a; sd3_medium_incl_clips.safetensors (5.5GB)sd3_medium_incl_clips_t5xxlfp8.safetensors (10.1GB)sd3_medium.safetensors (4.3GB) 前两个可以…

SAP OB52 财务账期月结月底月初开关

公告&#xff1a;周一至周五每日一更&#xff0c;周六日存稿&#xff0c;请您点“关注”和“在看”&#xff0c;后续推送的时候不至于看不到每日更新内容&#xff0c;感谢。 这是一条刮刮乐&#xff0c;按住全部选中&#xff1a;点关注的人最帅最美&#xff0c;欢迎&#xff1…

vuInhub靶场实战系列--Kioptrix Level #4

免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。 目录 免责声明前言一、环境配置1.1 靶场信息1.2 靶场配置 二、信息收集2.1 主机发现2.1.1 netdiscover2.1.2 arp-scan主机扫描 2.2 端口扫描2.3 指纹识别2.4 目…

nodejs——原型链污染

一、引用类型皆为对象 原型和原型链都是来源于对象而服务于对象的概念&#xff0c;所以我们要先明确一点&#xff1a; JavaScript中一切引用类型都是对象&#xff0c;对象就是属性的集合。 Array类型、Function类型、Object类型、Date类型、RegExp类型等都是引用类型。 也就…

Vue22-v-model收集表单数据

一、效果图 二、代码 2-1、HTML代码 2-2、vue代码 1、v-model单选框的收集信息 v-model&#xff1a;默认收集的就是元素中的value值。 单选框添加默认值&#xff1a; 2、v-model多选框的收集信息 ①、多个选择的多选 注意&#xff1a; 此处的hobby要是数组&#xff01;&…

【深度学习基础】激活函数:Tanh、Sigmoid 和 Softmax

激活函数是深度学习模型中不可或缺的一部分&#xff0c;它们赋予神经网络强大的非线性变换能力&#xff0c;使其能够拟合复杂的函数关系。在这篇博文中&#xff0c;我们将探讨三种常见的激活函数&#xff1a;Tanh、Sigmoid 和 Softmax&#xff0c;并提供一些记忆它们的技巧。 1…

C++基础知识(八:STL标准库 deque )

deque在C的STL(Standard Template Library)中是一个非常强大的容器&#xff0c;它的全称是“Double-Ended Queue”&#xff0c;即双端队列。deque结合了数组和链表的优点&#xff0c;提供了在两端进行高效插入和删除操作的能力&#xff0c;同时保持了随机访问的特性。 双端队列…

#慧眼识模每日PK[话题]##用五种语言说爸爸我爱你[话题]#

#慧眼识模每日PK #用五种语言说爸爸我爱你 你觉得哪个模型回答得更好&#xff1f;欢迎留言 A.蓝 B.紫 更多问题&#xff0c;扫码体验吧&#xff5e; by 国家&#xff08;杭州&#xff09;新型交换中心

养猫发现猫毛过敏?宠物空气净化器真的能拯救猫毛过敏吗?

广东省 猫咪是许多人梦寐以求的伴侣&#xff0c;但对于轻度猫毛过敏和鼻炎患者来说&#xff0c;养猫似乎是个遥不可及的梦想。我常在社交媒体上羡慕地观看朋友们的吸猫日常&#xff0c;却因过敏无法亲自养猫。这种遗憾驱使我寻找解决方案&#xff0c;从研究低过敏猫种到尝试空气…

2024/06/13--代码随想录算法3/17|01背包问题 二维、01背包问题 一维、416. 分割等和子集

01背包问题 二维 卡码网链接 动态规划5步曲 确定dp数组&#xff08;dp table&#xff09;以及下标的含义&#xff1a;dp[i][j] &#xff1a;从下标为[0,i-1]个物品中任取&#xff0c;放进容量为j的背包&#xff0c;价值总和最大为多少。确定递推公式&#xff0c; 有两个方向可…

算法专题总结链接地址

刷力扣的时候会遇到一些总结类型的题解&#xff0c;在此记录&#xff0c;方便自己以后找 前缀和 前缀和https://leetcode.cn/problems/unique-substrings-in-wraparound-string/solutions/432752/xi-fa-dai-ni-xue-suan-fa-yi-ci-gao-ding-qian-zhui-/ 单调栈 单调栈https:…

Javaweb04-Servlet技术2(HttpServletResponse, HttpServletRequest)

Servlet技术基础 HttpServletResponse对象 HttpServletResponce对象是继承ServletResponse接口&#xff0c;专门用于封装Http请求 HttpServletResponce有关响应行的方法 方法说明功能描述void setStatus(int stauts)用于设置HTTP响应消息的状态码&#xff0c;并生成响应状态…

第17章通信系统架构设计理论与实践

常见的5种常用的网络架构和构建网络的相关技术&#xff0c;以及网络构建的分析和设计方法。 17.1通信系统概述 通信技术和网络技术的发展&#xff0c;通信网络发生很大变化&#xff0c;入网的形式变化&#xff0c;传输的速率的提高、接入网络的方式多样化、网络结构的更为复杂…

~$开头的临时文件是什么?可以删除吗?

&#xff08;2023.12.4&#xff09; 在进行Word文档编辑的时候&#xff0c;都会产生一个以~$开头的临时文件&#xff0c;它会自动备份文档编辑内容&#xff0c;若是正常关闭程序&#xff0c;这个文档就会自动消失&#xff1b;而在非正常情况下关闭word文档&#xff0c;如断电&…

考研计组chap2数据的表示和运算(补充)

一、进位计数制 1.r进制 第i位表示r进制的权为i 2.进制转换 &#xff08;1&#xff09;r->10 对应位置数*权值 &#xff08;2&#xff09;2 -> 16 or 8 每三位2进制数可表示1位16进制 每四位2进制数可表示1位16进制 so 分开之后转为16进制即可 eg&#xff1a;11…