1.Elvis操作符?:
如果?:左边的表达式非空,则操作符返回左边的结果,否则返回右边的结果(仅在左侧为空的时候右侧的表达式才会进行计算)。
val a=b?.length?:-1
val a:Int = if(b!=null) b.length else -1
val a=b?.length?:-1
val a:Int = if(b!=null) b.length else -1
2.安全转换as?
当使用as转型的时候,可能会经常出现ClassCastException。所以,现在使用as?安全转型,当转型不成功的时候,它会返回null。
当使用intent传值时有可能会出现空字符串不能用as强制转型,这时需要使用as?
val m:Int?=a as? Int
val m:Int?=a as? Int
3.冒号
用于类的继承,变量的定义
1.类型和超类型(父类)之间的冒号前要有一个空格
2.实例和类型之间的冒号前不要空格
定义变量:var str: String?=null
类的继承与变量定义:class MainActivity< T : Serializable>(str : String) : Activity
1.类型和超类型(父类)之间的冒号前要有一个空格
2.实例和类型之间的冒号前不要空格
定义变量:var str: String?=null
类的继承与变量定义:class MainActivity< T : Serializable>(str : String) : Activity
4.类型判断符is
检查某个实例是否是某个类型,如果判断出属于某个类型,那么判断后的分支中可以直接当该类型使用,无需显式转换
|
5.范围操作符 .. 以及 in
使用in运算符来检查某个数字是否在指定区间内
区间内循环:
可以进行任意数量的迭代,而不是每次变化都是1
三引号的形式用来输入多行文本,也就是说在三引号之间输入的内容将被原样保留,之中的单引号和双引号不用转义,其中的不可见字符比如/n和/t都会被保留
遍历一个list可以用list.forEach{ b-> blist.add(b) }
|
区间内循环:
|
可以进行任意数量的迭代,而不是每次变化都是1
|
三引号的形式用来输入多行文本,也就是说在三引号之间输入的内容将被原样保留,之中的单引号和双引号不用转义,其中的不可见字符比如/n和/t都会被保留
|
遍历一个list可以用list.forEach{ b-> blist.add(b) }
6.$符号
这个我感觉在拼串上用的比较方便一点
|
7.==和===的区别
==是判断是否相等,===判断值以及引用是否完全相等
|
8._(下划线)
我理解的是构造参数中在下文用不到的参数可以用_代替
|
9.::符号
1.常见的是得到类的class对象
|
|
10.@符号
1.限定this的类型
|
|
|
|
11.{}符号
这个还有->应该是lambda表达式
|
12.?问号
表示对象可能为空
|