一.语法 in&until&downTo&step
代码
class KotlinActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_kotlin)
syntacticSugarFunction()
}
/**
* 语法糖函数
* */
private fun syntacticSugarFunction() {
//in&!in语法
val inB0 = (1 in 1..10)
val inB1 = (5 in 1..10)
val inB2 = (10 in 1..10)
val inB3 = (20 in 1..10)
val inB4 = (30 !in 1..10)
Log.d("KotlinActivity", "in&!in语法 1在[1,10]之间?$inB0")
Log.d("KotlinActivity", "in&!in语法 5在[1,10]之间?$inB1")
Log.d("KotlinActivity", "in&!in语法 10在[1,10]之间?$inB2")
Log.d("KotlinActivity", "in&!in语法 20在[1,10]之间?$inB3")
Log.d("KotlinActivity", "in&!in语法 30不在[1,10]之间?$inB4")
//until语法
for (i in 1 until 5) {
Log.d("KotlinActivity", "until语法 [1,5)之间的数值:$i")
}
//downTo语法 不设置步长
for (i in 5 downTo 1) {
Log.d("KotlinActivity", "downTo语法 5到1输出:$i")
}
//downTo语法 设置步长
for (i in 5 downTo 1 step 2) {
Log.d("KotlinActivity", "downTo语法 步长2 5到1输出:$i")
}
for (i in 1..5 step 2) {
Log.d("KotlinActivity", "in语法 步长2 [1,5]输出:$i")
}
}
}
结果
D/KotlinActivity: in&!in语法 1在[1,10]之间?true
D/KotlinActivity: in&!in语法 5在[1,10]之间?true
D/KotlinActivity: in&!in语法 10在[1,10]之间?true
D/KotlinActivity: in&!in语法 20在[1,10]之间?false
D/KotlinActivity: in&!in语法 30不在[1,10]之间?true
D/KotlinActivity: until语法 [1,5)之间的数值:1
D/KotlinActivity: until语法 [1,5)之间的数值:2
D/KotlinActivity: until语法 [1,5)之间的数值:3
D/KotlinActivity: until语法 [1,5)之间的数值:4
D/KotlinActivity: downTo语法 5到1输出:5
D/KotlinActivity: downTo语法 5到1输出:4
D/KotlinActivity: downTo语法 5到1输出:3
D/KotlinActivity: downTo语法 5到1输出:2
D/KotlinActivity: downTo语法 5到1输出:1
D/KotlinActivity: downTo语法 步长2 5到1输出:5
D/KotlinActivity: downTo语法 步长2 5到1输出:3
D/KotlinActivity: downTo语法 步长2 5到1输出:1
D/KotlinActivity: in语法 步长2 [1,5]输出:1
D/KotlinActivity: in语法 步长2 [1,5]输出:3
D/KotlinActivity: in语法 步长2 [1,5]输出:5
说明
1.in表示在...范围内,比如in 1..10 就是在1到10内,闭区间包括1和10。
2.
!in表示不在...范围内,和in正好相反。
3.until表示半开区间,比如1 until 5 输出 1,2,3,4。
4.downTo 表示从...到...,比如 5 downTo 1 输出 5,4,3,2,1。
5.step设置步长,和in&downTo等一起使用。
二.语法equals&==
代码
class KotlinActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_kotlin)
testFunction()
}
/**
* 函数
* */
private fun testFunction() {
val str01 = "字符串001"
val str02 = "字符串001"
val b1 = str01.equals(str02)
val b2 = str01 == str02
Log.d("KotlinActivity", "字符串类型 str01和str02 equals结果:$b1")
Log.d("KotlinActivity", "字符串类型 str01和str02 ==结果:$b2")
val int01 = 12
val int02 = 12
val b3 = int01 == int02
Log.d("KotlinActivity", "数值类型 int01和int02 ==结果:$b3")
}
}
结果
D/KotlinActivity: 字符串类型 str01和str02 equals结果:true
D/KotlinActivity: 字符串类型 str01和str02 ==结果:true
D/KotlinActivity: 数值类型 int01和int02 ==结果:true
说明
1.equals 是方法,引用数据类型存在此方法,一般用来比较值是否相等。
2.==是运算符,基本数据类型和引用数据类型都可使用,基本数据类型使用,比较的是两个数值大小是否相等,而引用数据类型使用,比较的是两个数据类型堆内存地址是否相等。
三.语法is&as
代码
class KotlinActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_kotlin)
testFunction()
}
/**
* 函数
* */
private fun testFunction() {
val str = "字符串"
val b1 = str is String
Log.d("KotlinActivity", "str是否是字符串类型:$b1")
val any: Any = "字符串"
val str01: String = any as String
Log.d("KotlinActivity", "Any类型强制转换成字符串类型:$str01")
}
}
结果
D/KotlinActivity: str是否是字符串类型:true
D/KotlinActivity: Any类型强制转换成字符串类型:字符串
说明
1.is 用来判断一个对象与指定的类型是否一致。类似java中的instanceof关键字。is具有智能转换的作用,比如上述代码中,如果b1为true,str就会自动转换成字符串类型。
智能转换的好处:
<1> 提高类型安全性:智能转换消除了手动类型检查和转换的需要,减少了运行时类型错误的可能性。
<2> 更简洁的代码:它们通过删除冗余的类型检查和强制转换来简化代码并使其更加简洁和可读。
2.as是强制类型转换。
四.空安全
在Java中,NullPointerException异常十分常见,而Kotlin的优点则是可以尽可能避免执行代码时出现的空指针异常。比如Kotlin的空安全。
代码
class KotlinActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_kotlin)
testFunction()
}
/**
* 函数
* */
private fun testFunction() {
val b1: String? = null
val b2: String? = "str"
val length1 = b1?.length
val length2 = b2?.length
Log.d("KotlinActivity", "字符串b1长度:$length1")
Log.d("KotlinActivity", "字符串b2长度:$length2")
}
}
结果
D/KotlinActivity: 字符串b1长度:null
D/KotlinActivity: 字符串b2长度:3
说明
1.b?.length 表示:若b不为null,才调用b.length。这就是Kotlin的空安全。