我的kotlin学习笔记(二)——基本类型

记上篇笔记后,继续学习

2、基本类型

2.1、?和 !!

// ?:表示当前是否对象可以为空
var recyclerView: RecyclerView?=null

// !!: 表示当前对象不为空的情况下执行
recyclerView!!.setHasFixedSize(true)

2.2、数字字面值中的下划线

// 增加数字常量的可读性
val phone = 188_6091_0348

2.3、== 和===
两个等号==:比较的对象的value。
三个等号===:比较的内存地址。

思考几个小问题:
1、下面加问号和不加问号有什么区别?

var a: Int = 128
var b: Int ?= 128

2、下面a==b和a===b的值各是多少

var a: Int = 127
var b: Int ?= 127

3、现在a==b和a===b的值各是多少

var a: Int = 128
var b: Int ?= 128

考验java基础的时候到了,这里有个小坑,反正我踩完了:采坑链接

恶补 :java的自动装箱和拆箱

自动装箱和拆箱是重java1.5开始引入。自动装箱指Java自动将基本类型值转换成对应的对象,比如将int的变量转换成Integer对象,这个过程就叫装箱。反之拆箱就是将Integer对象转换成int类型值。

原理:自动装箱时编译器调用valueOf将基本数据类型转换为对象;自动拆箱时,编译器调用intValue()等类的方法将对象转为基础类型。

 // 自动装箱栗子
 // 1是int类型;而a是Integer,一个对象
 Integer a = 1;

// 自动拆箱栗子
 int a = new Integer(1);

注意:处于节省内存的考虑,JVM会缓存-128到127的Integer对象,当创建新的Integer对象时,如果对象值在-128到127区间里,并且已经存在相同值的对象,则返回这个对象,否则创建新的Integer对象。

详情参考:
https://droidyue.com/blog/2015/04/07/autoboxing-and-autounboxing-in-java/

https://www.jianshu.com/p/0ce2279c5691

2.4、显示转换

回顾下java的显示类型转换和隐式类型的转换。

隐式类型转换:又称自动类型转换,从存储范围小的类型到存储范围大的类型。

转换规则:byte → short(char) → int → long → float → double

示例代码:

// 这里,JVM首先将b的值转换为short类型,然后赋值给sh
byte b = 10;
short sh = b;

注意:比较大的整数类型转换成小数类型是,由于存储方式不同,可能存在数据精度的损失。

显示类型转换:就叫强制类型转换,简称强转。从存储范围大的类型到存储范围小的类型。改类类型转换课鞥呢存在精度的损失。

转换规则:double→float→long→int→short(char)→byte

  int n = 123;
  byte b = (byte)n; //123
  int m = 1234;
  byte b1 = (byte)m;    //-46

回到kotlin,kotlin中较小的类型不能隐式转换成较大类型。所以要进行隐式转换,只能采用显示转换来实现。

// 显示拓宽
val b: Byte = 1 
val i: Int = b.toInt() 

每个数字类型支持如下转换:
—— toByte():Byte
—— toShort():Short
—— toInt():Int
—— toLong():Long
—— toFloat():Float
—— toDouble():Double
—— toChar():Char

2.5、数组
使用库函数arrayOf()来创建一个数组并添加元素值。

var array= arrayOf(1, 2, 3) 

此外还有原生类型数组:ByteArray、 ShortArray、IntArray 等等

遍历数组:

var array = arrayOf(1, 2, 3)

for (s in array) {
    Log.e("s is ", s.toString())
}

for (i in array.indices) {
    Log.e("index is ", i.toString() + ", value is " + array[i])
}

for ((index, value) in array.withIndex()) {
    Log.e("index is ", index.toString() + ", value is " + value)
}

补充:when表达式
kotlin里的when表达式取代了类C语言的switch操作符,也可以取代 if-else if链 :

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> { // 注意这个块
        print("x is neither 1 nor 2")
    }
}

// 不提供参数
when {
    x.isOdd() -> print("x is odd")
    x.isEven() -> print("x is even")
    else -> print("x is funny")
}

2.6、字符串模板

val i = 10
val s = "i = $i" // 求值结果为 "i = 10"

// 使用花括号
val s = "abc"
val str = "$s.length is ${s.length}" // 求值结果为 "abc.length is 3"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值