今天是2021年的第5天,终于有时间来写自己的博客了和学习新的知识点,希望自己在新的的一年有收获,我要给自己立个flag,每天今天发布一篇关于Kotlin 的知识,后期项目开发准备用它了,从Java混合,到全部Kotlin
Kotlin 操作符
在学习Kotlin之前最好有对比Java思想来学习,我也知识挑常用的操作符来记录
在Kotlin 中声明一个变量的时候,可以这样
//声明
var name:String=“”
name=null //编译报错
如何使其编译通过,就要用到 ?操作符,直接声明到类型后面,在Kotlin 基本数据类型都是对象或者类,对于对象或者类来说,只有null和非null区别,?操作符主要是帮助我们来避开空指针的情况,也就是Kotlin吹牛逼说的,Kotlin能够避开大部分的NullPointerException
//声明
var name:String?=“”
name=null //编译通过
?操作符用法
//用法1,允许变量为null情况,直接声明在变量类型后面
var name:String?="小明"
name=null
name="小花"
Log.i("name=",name.toString())
//方法2,作用在方法,返回值上,允许为null情况发生
//作用方法参数上,允许传为null情况发生
funName(null);
fun funName(str1:String?):String?{
return str1
}
//错误用法,编译不用通过
fun funName(str1:String):String{
return str1
}
在实际开发中,我们经常需要对Object或者String,获取值或者操作,但是我们不知道对象是否为空,如果为空就会空指针,?操作符 ,作用对象,如果?左边非空,那么就返回name?.length,如果,为空那么,返回null
//作用在String
var name:String?="namme"
Log.i("name?.length=",name?.length.toString())
//作用对象
var list:ArrayList<String>?=ArrayList<String>()
Log.i("list?.size=",list?.size.toString())
?: 操作符
这个操作符主要作用于表达形式,表达式1?:表达式 2 ,如果表达式1非空,那么返回表达式1,如果表达式1为空,那么执行表达式2
//如果age 为null,执行?:右边,如果age非null,那么返回age本身
var age:String?=null
age=null
var leng=age?:-1
!! 操作符
如果b为空,那么就会报空指针异常,如果不为空就执行成功返回长度
val l = b!!.length
== 与 ===加粗样式
==判断值是否相等,===判断值及引用是否完全相等。
val num: Int = 128;
val a:Int? = num
val b:Int? = num
Log.i("a == b",(a == b).toString())//结果true
Log.i("a === b",(a === b).toString())//结果false
…符号 以及 in
在Kotlin中如果要for循环,怎么实现呢,需要搭配…和 in 来实现,
…代表从x到y,包括x和y,这是一个闭区间运算符,
in代表在一个区间中
for (i in 1..10) { // 等价于 1 <= i && i <= 10
println(i)
}
@符号
限定this的类型,限时OrderInvoiceActivity类型
ActivityUtil.showToast(this@OrderInvoiceActivity, it + "")
::符号
得到类的Class对象
startActivity(Intent(this@MainActivity,MainActivity::class.java))
as?操作符
当使用 as 转型的时候,可能会经常出现 ClassCastException。 所以,现在可以使as?安全转型,当转型不成功的时候,它会返回 null。
注:在使用intent传值的时候,会出现空字符串不能用as强制转型,这是应该使用as?
val m: Int? = a as? Int
var textView1:TextView= findViewById<View>(R.id.textView1) as TextView;