///-----------------------for循环写法大全
//for循环 >=0 <1 特别注意区分大小写
for (j in 0 until 1) {
print("i => $j \t")
}
//可增可减 <=12 >=10
for (i in 12 downTo 10){
}
//>=20 <=25
for (i in 20 .. 25){
print("i => $i \t")
}
// 从10到16 每次跳跃2个
for (i in 10 until 16 step 2){
print("i => $i \t")
}
//nb 遍历字符串
for (i in "abcdefg"){
print("i => $i \t")
}
//输出 i => a i => b i => c i => d i => e i => f i => g
// 数组遍历方式第一种类
var arrayListTwo = arrayOf(1,3,5,7,9)
for ((index,value) in arrayListTwo.withIndex()){
println("index => $index \t value => $value")
}
/* 打印输出
index => 0 value => 1
index => 1 value => 3
index => 2 value => 5
index => 3 value => 7
index => 4 value => 9*/
//多元素更新
var arrayListThree = arrayOf(2,'a',3,false,9)
var iterator: Iterator<Any> = arrayListThree.iterator()
while (iterator.hasNext()) {
println(iterator.next())
}
// 输出结果
/*
2
a
3
false
9
*/
//-----------------------when条件语句
//强的一批
when (5) {
1 -> {
println("1")
}
2 -> println("2")
3 -> println("3")
5 -> {
println("5")
}
else -> {
println("0")
}
}
//变种写法
when (1) {
// 即x = 1,2,3时都输出1。
1, 2, 3 -> {
println("1")
}
5 -> {
println("5")
}
else -> {
println("0")
}
}
//变种写法2
var num: Int = 5
when (num > 5) {
true -> {
println("num > 5")
}
false -> {
println("num < 5")
}
else -> {
println("num = 5")
}
}
// 检查值是否存在于集合或数组中
//操作符:
//(in) 在
//(!in) 不在
//限定:只适用于数值类型
var arrayList = arrayOf(1, 2, 3, 4, 5)
when (1) {
in arrayList.toIntArray() -> {
println("1 存在于 arrayList数组中")
}
in 0..10 -> println("1 属于于 0~10 中")
!in 5..10 -> println("1 不属于 5~10 中")
else -> {
println("都错了 哈哈!")
}
}
/*3.5、检查值是否为指定类型的值
操作符
是(is)
不是(!is)
值得注意的是,Kotlin的智能转换可以访问类型的方法和属性
例:*/
when ("abc") {
is String -> println("abc是一个字符串")
else -> {
println("abc不是一个字符串")
}
}
// 智能转换
var a: Int = 2
when (a) {
!is Int -> {
println("$a 不是一个Int类型的值")
}
else -> {
a = a.shl(2)
println("a => $a")
}
}
/* 输出结果为:
abc是一个字符串
a => 8*/
操作符
加减操作符
区间操作符:即是符号..
。值得注意的是这个操作符在Java
中是不存在的,且两个操作数都是整型 如下图
// 常量注意事项:
val 它只能是一个不能修改的变量 ,常量定义const val
注意:其特点:const
只能修饰val
,不能修饰var
数据类型
- 两个数值的比较
判断两个数值是否相等(
==
),判断两个数值在内存中的地址是否相等(===
)
空类型安全
1.2.5、let操作符(贼六)
let
操作符的作用:当时用符号?.
验证的时候忽略掉null
let
的用法:变量?.let{ ... }
例:排除掉数组中的空元素
val arrTest : Array<Int?> = arrayOf(1,2,null,3,null,5,6,null)
// 传统写法
for (index in arrTest) {
if (index == null){
continue
}
println("index => $index")
}
// let写法
for (index in arrTest) {
index?.let { println("index => $it") }
}
输出结果为:
index => 1
index => 2
index => 3
index => 5
index => 6
Evils操作符
Evils
其实不是一个操作符,而是evil
的复数,而evil
的意思在这里可以理解为屏蔽、安全的
操作符,这样的操作符有三种:
?:
这个操作符表示在判断一个可空类型时,会返回一个我们自己设定好的默认值.!!
这个操作符表示在判断一个可空类型时,会显示的抛出空引用异常(NullPointException)
.as?
这个操作符表示为安全的类型转换. 强转, 可能出现异常加入 ?即可解决
String 操作符
下列几个函数都是处理字符串为空串或为空的:
isEmpty()
: 其源码是判断其length
是等于0
,若等于0
则返回true
,反之返回false
。不能直接用于可空的字符串isNotEmpty()
: 其源码是判断其length
是否大于0
,若大于0
则返回true
,反之返回false
。不能直接用于可空的字符串isNullOrEmpty()
: 其源码是判断该字符串是否为null
或者其length
是否等于0
。isBlank()
: 其源码是判断其length
是否等于0
,或者判断其包含的空格数是否等于当前的length
。不能直接用于可空的字符串isNotBlank()
: 其源码是对isBlank()
函数取反。不能直接用于可空的字符串isNotOrBlank()
: 其源码判断该字符串是否为null
。或者调用isBlank()
函数