Kotlin类型系统

编程语言中使用类型的目的是 让编译器能够确定类型所关联的对象需要分配多少空间。

使用类型系统,编译器可以检查无意义的、无效的、类型不匹配等错误代码。

Java与Kotlin类型系统

基本数据类型 和 引用数据类型 在创建时,内存存储方式的区别:

  • 基本数据类型 在被创建时,在栈上给其分配一块内存,将其值直接存储在栈上,性能高;
  • 引用数据类型 在被创建时,现在的栈上给其引用分配一块内存(句柄),对象的具体信息存储在堆内存上,然后由栈上面的引用指向堆内存中对象的地址。

Java为每一个基本类型都引入了对应的包装类型,从Java5开始引入了自动装箱/拆箱机制,使得二者可以互相转换。

  • 原始类型:boolean,char,byte,short,int,long,float,double.
  • 对应的包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double.

Kotlin中去掉了原始类型,只有包装类型,编译器在编译代码的时候,会自动把对应的包装类型拆箱为原始类型,优化性能。

 Kotlin类型系统分为可空类型不可空类型

Kotlin中数字类型 与 Java中原始数字类型:

KotlinJava
Intint
Longlong
Floatfloat
Doubledouble

Kotlin中可空数字类型 与 Java中装箱数字类型:

KotlinJava
Int?Integer
Long?Long
Float?Float
Double?Double
fun testTypeF(): Unit {
    val a:Int = 100
    val b:Int = 100
    println(a === b) // 引用相等 , 输出:true
    println(a==b) // 值相等,输出:true

    val x:Int? = 1000
    val y:Int? = 1000
    // 可空类型Int?等价于Java中的Integer包装类型,这里的x、y指向不同对象,因此引用不相等
    println(x === y) // 引用不相等 , 输出:false .

    println(x==y) // 值相等,输出:true
}
  • Java中,从基本数字类型引用数字类型的转换过程就是装箱操作,如 int 转为 Integer;
    反过来,从 Integer 转为 int 就是 拆箱操作

  • Kotlin中,非空数字类型 转为 可空数字类型 的过程就是 装箱操作,如 Int 转为 Int? 。
    同时非空的Int类型 会被编译器自动拆箱成 基本数字类型int,保存到栈空间。

数组 Array

Java中的数组类型 T[] ,方括号不太“优雅”。
Kotlin摒弃了这个数组类型声明的语法。
Kotlin直接使用 Array类型代表数组类型。

fun testArray(): Unit {
    // 构造5个元素的数组,元素初始值是 i * i
    val sq = Array(5) { i -> i * i }
    sq.forEach{ println(it)} // 输出:0,1,4,9,16
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值