首页 > 其他分享 >第二节 数据类型

第二节 数据类型

时间:2023-12-12 17:45:38浏览次数:32  
标签:Int Kotlin 数据类型 数值 运算符 类型 第二节

数据类型

Kotlin的基本数据类型与Java、C++基本对应。事实上绝大多数程序语言的基本数据类型都差不多。

基本数据类型

在Java中8中基本数据类型不属于类,也就不具备“对象”特征,无法进行面向对象操作。Java的解决方案是提供包装类将基本数据类型进行封装,使之每个包装类对象封装一个基本数据类型数值。而在Kotlin中基本数据类型没有对应的包装类,Kotlin编译器根据不同场景将其编译成Java中的基本类型数据或者包装类对象。

Kotlin基本数据类型

整数类型

与Java相同,Kotlin中数据类型不依赖于具体计算机,依靠虚拟机实现跨平台的同时所有数据类型大小均是固定的。1字节:8位

整数类型 宽度 取值范围
Byte 1字节 -128~127
Short 2字节 -215~215-1
Int 4字节 -231~231-1
Long 8字节 -263~263-1

Kotlin默认整数类型为Int,Long类型需要在数值后加L(不允许加“l”,容易造成误解)

对整数变量赋值时,可以使用二进制(0b/0B)和十六进制(0x/0X)表示,但不支持八进制。

浮点类型

浮点类型 宽度
Float 4字节
Double 8字节

Kotlin默认浮点类型为Double,如需表示Float类型需要在数值后加上F或f。

同时,在进行数学算术运算时可能会使用到指数运算,Kotlin通过enum的方式用于表示指数值。例如:2e2表示2*102

字符类型

与Java将字符类型归类于数值类型不同,Kotlin中字符类型独立存在,用于表示单个字符并用单引号括起来。

同时与Java一致的是,Kotlin字符采用双字节的Unicode编码,可以用十六进制(无符号)编码形式表示:

val v1 = '\u0041' // v1 is 'A'

对一些特殊字符,需要字符转义:

字符表示 Unicode编码 说明
\t \u0009 tab
\n \u000a 换行
\r \u000d 回车
" \u0022 双引号
' \u0027 单引号
\ \u005c 反斜号
$ \u0024 美元符
\b \u0008 退格

布尔类型

与Java一致,布尔类型并不属于数值类型,所以无法用1或0表示true和false,也无法与数值类型进行转换。

// val v1:Boolean=1 // false

数值类型转换

数值类型之间的转换在赋值阶段采用显示转换,在数学计算上采用隐式转换。

显式转换

与C和C++不同,Kotlin的类型检查非常严格,无法直接对不同类型之间进行赋值:

val v1: Byte = 1
// val v2:Int=v1 // false

想要实现赋值转换,则必须通过转换函数显示转换:

  • toByte()
  • toShort()
  • toInt()
  • toLong()
  • toFloat()
  • toDouble()
  • toChar()

需要注意到:从大范围(宽度)转换到小范围(宽度),会造成精度损失。因为程序会直接将大范围数值的高位截取,那么如果高位存在数值,则转换得到的数值便是错误数值;如果大范围数值本身值较小,则可能数值本身没有问题。

对于字符类型转换为数值类型,建议使用字符类型对象的code成员函数,不建议直接使用toInt函数(已废弃)

隐式转换

当存在多个不同类型的数值进行算术运算,由于其参与的数值类型不一致,原则其结果类型与参与运算数值的最大类型保持一致。

操作数1 操作数2 转换后类型
Byte Byte Int
Byte Short Int
Byte,Short Int Int
Byte,Short,Int Long Long
Byte,Short,Int,Long Float Float
Byte,Short,Int,Long,Float Double Double

可空类型

Kotlin与Swift语言类似,默认情况下所有的数据类型均是非空的,声明的变量不能接收空值。

如果需要接收空值,则需要用到每种非空类型提供对应的可空类型(在非空类型后加上?表示)

对于可空类型在具体实现上存在一些限制:

  • 不能直接调用可空类型对象的函数或属性
  • 不能把可空类型数据赋值给非空类型变量
  • 不能把可空类型数据传递给非空类型参数的函数

为了“突破”这些限制,Kotlin提出以下运算符:

  • 安全调用运算符(?.)
  • 安全转换运算符(as?)
  • Elvis运算符(?:)
  • 非空断言(!!)

安全调用运算符:

可空类型可以通过安全调用运算符调用其函数或属性,通过该运算符判断空类型变量是否为空,如果是返回空值,如果不是调用函数或属性。

非空断言运算符:

非空断言运算符作用就是断言可空类型不会为空,如果可空类型为空,抛出空指针异常,否则正常调用函数或属性。

Elvis运算符:

当希望表达式为空值,但是不希望返回默认的空值。Elvis运算符(空值合并运算符)让其可以自定义表达式为空时返回值内容,其理论结构类似三目运算符。

标签:Int,Kotlin,数据类型,数值,运算符,类型,第二节
From: https://www.cnblogs.com/aaroncoding/p/17897370.html

相关文章

  • 设备电源管理数据类型【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/driver-api/pm/types.htmlstructdev_pm_opsdevicePMcallbacks.Definition:structdev_pm_ops{int(*prepare)(structdevice*dev);void(*complete)(structdevice*dev);int(*suspend)(structdevice*dev)......
  • 列的数据类型详解
    数据库的列的类型1.数值tinyint 十分小的数据 1字字节smallint 较小的数据 2个字节mediuminl 中等大小的数据 3个字节int 标准的整数 4个字节 常用的bigint 较大的数据 8个字节float 浮点数 4个字节clouble 浮点数 8个字节 存在精度问题clecimal 字符串形式的浮点数 金融......
  • Redis 3 种特殊数据类型详解、Redis内存碎片
    CacheAsidePattern(旁路缓存模式)CacheAsidePattern是我们平时使用比较多的一个缓存读写模式,比较适合读请求比较多的场景。CacheAsidePattern中服务端需要同时维系db和cache,并且是以db的结果为准。下面我们来看一下这个策略模式下的缓存读写步骤。写:先更新db然......
  • python数据类型元组、列表、集合、字典相互嵌套
    系统Windows10专业工作站版22H2软件python-3.9.6-amd64.exe拓展库:jupyter==1.0.0notebook==7.0.61.元组嵌套1.1元组嵌套元组try:tuple0=((1,2,3),(1,2,3),(1,2,3))print(tuple0,type(tuple0))except:print('error')((1,2,3),(1,2,3),(1,2,......
  • C++学习笔记五:变量与数据类型(Auto类型)
    Auto允许编译器自己来推断变量的类型,这种新功能是在c++11引入的。这个关键字结合for循环使用可以节省变量类型的重复输入。VSCode可以在鼠标移动到变量上之后直接显示变量的类型。autovar1{12};//intautovar2{13.0};//doubleautovar3{14.0f};//floatautovar4{15......
  • C++学习笔记四:变量与数据类型(布尔型)
    今天来整理一下布尔型变量的使用方法1.声明和初始化一个布尔类型的变量占据1Byte空间,数值0代表false,其他非0数值代表trueboolred_light{false};boolgreen_light{true};std::cout<<"sizeof(bool):"<<sizeof(bool)<<std::endl; 2.打印一个布尔变量std::......
  • Redis的数据类型以及使用场景,看这一篇就够啦
    Redis的数据类型以及使用场景,看这一篇就够啦原创2021-06-2018:02·猿视野Redis数据类型stringStringhashHashMaplistLinkedListsetHashSetsorted_setTreeSetredis数据存储格式redis自身是一个Map,其中所有的数据都是采用key:value的形式存储数据类型指......
  • C++学习笔记三:变量与数据类型(浮点型)
    1.数据类型与所占内存大小类型大小精度注意float47 double815默认longdouble16>double 精度就是有效数字 2.声明和初始化floatnumber1{1.12345678901234567890f};//Precision:7doublenumber2{1.12345678901234567890};......
  • SV 数据类型
    Verilog数据类型变量类型-用于存储值线网类型-用于连接硬件模块reg-在硬件中可能会被综合成DFF和Latch线网类型线网的驱动-可以是门,也可以是实例化的门变量只能通过过程赋值进行赋值-initial/alwaysinteger-32bit,有符号数-通常循环变量的时候会使......
  • C++学习笔记二:变量与数据类型(整型)
    1.int(整型数据):1.1进制的表示:十进制,八进制,16进制,二进制intnumber1=15;//Decimalintnumber2=017;//Octalintnumber3=0x0F;//Hexadecimalintnumber4=0b00001111;//Binary上面几种表示方式都表示15这个数字,用cout输出得到相同的结果 1.2......