如果你的简历中有kotlin语言就看这个吧
在 Kotlin 中,变量声明方式与 Java 有所不同,并且 Kotlin 引入了 var
和 val
关键字来明确变量的可变性,下面为你详细介绍:
在 Kotlin 里,变量声明时可以显式指定类型,也可以利用类型推断机制让编译器自动推断变量类型。
var variableName: DataType = initialValue
val constantName: DataType = initialValue
var age: Int = 25
val pi: Double = 3.14
类型推断
如果在声明变量时同时进行了初始化,Kotlin 编译器能够根据初始化值自动推断出变量的类型,此时可以省略类型声明:
var variableName = initialValue
val constantName = initialValue
var name = "John" // 编译器会自动推断 name 为 String 类型
val isAdult = true // 编译器会自动推断 isAdult 为 Boolean 类型
var
和 val
的区别
var
var
是可变变量(variable)的声明关键字。使用 var
声明的变量在初始化后,其值可以被修改。
示例代码:
var number = 10
number = 20 // 可以对使用 var 声明的变量重新赋值
println(number) // 输出 20
val
val
是只读变量(value)的声明关键字。使用 val
声明的变量在初始化后,其引用不能再指向其他对象,相当于 Java 中的 final
变量。不过,如果该变量引用的是一个可变对象,那么对象内部的属性是可以修改的。
示例代码:
val list = mutableListOf(1, 2, 3)
// list = mutableListOf(4, 5, 6) // 这行代码会报错,因为 val 声明的变量不能重新赋值
list.add(4) // 但是可以修改可变对象内部的属性
println(list) // 输出 [1, 2, 3, 4]
总结:
var
用于声明可变变量,在变量的生命周期内可以多次赋值。
val
用于声明只读变量,一旦初始化后,变量的引用不能再改变,但如果引用的是可变对象,对象内部状态可以改变。在实际开发中,建议优先使用 val
,因为它能提高代码的安全性和可维护性,减少因意外修改变量值而引发的错误。
在 Kotlin 里,空安全机制是一项极为重要的特性,它从语言层面显著减少了空指针异常(NullPointerException)的出现,这在 Android 开发中对提升应用的稳定性非常关键。下面详细阐述空安全机制以及 ?
和 !!
操作符的作用。
可空类型示例
若要声明一个可空类型的变量,需要在类型后面加上 ?
var nullableName: String? = "John"
nullableName = null // 可以将 null 赋值给可空类型的变量
?
操作符的作用
安全调用操作符
?
作为安全调用操作符,可用于调用可空对象的方法或访问其属性。当对象为 null
时,调用操作不会执行,而是直接返回 null
,避免了空指针异常。
var nullableName: String? = "John"
val length = nullableName?.length
// 如果 nullableName 不为 null,length 就是字符串的长度;如果为 null,length 也为 null
!!
操作符的作用
!!
是非空断言操作符。当你确定一个可空对象不为 null
时,可以使用 !!
操作符将其转换为非可空类型。不过,如果对象实际上为 null
,使用 !!
会抛出空指针异常。
var nullableName: String? = "John"
val length = nullableName!!.length
// 如果 nullableName 为 null,这里会抛出空指针异常;不为 null 则正常获取字符串长度
总结:
Kotlin 通过类型系统强制区分可空与非可空类型,使用?
声明可空类型并结合安全调用避免空指针异常,!!
用于断言非空但需谨慎使用,从语言层面提升了代码安全性。
Kotlin中`when`表达式与Java中`switch`语句的区别和优势。
语法结构
- Java 的
switch
语句:有特定的语法格式,需要使用switch
关键字,后面紧跟一个表达式或变量,每个case
分支需要使用break
语句来避免穿透,否则会继续执行下一个case
分支。
int num = 2;
switch (num) {case 1:System.out.println("One");break;case 2:System.out.println("Two");break;default:System.out.println("Other");
}
- Kotlin 的
when
表达式:语法更加灵活,可以作为表达式使用,也可以作为语句使用。不需要使用break
语句,因为每个分支执行完后会自动跳出。而且when
可以没有参数,直接对条件进行判断。
val num = 2
when (num) {1 -> println("One")2 -> println("Two")else -> println("Other")
}
// 无参数的 when 示例
val age = 20
when {age < 18 -> println("Minor")age >= 18 && age < 60 -> println("Adult")else -> println("Senior")
}
支持的数据类型
- Java 的
switch
语句:在 Java 7 之前,switch
语句只能支持byte
、short
、char
、int
及其包装类,以及枚举类型。Java 7 开始支持String
类型。 - Kotlin 的
when
表达式:支持更广泛的数据类型,包括所有基本数据类型、字符串、枚举、类实例等,甚至可以使用任意表达式作为分支条件。
data class Person(val name: String, val age: Int)
val person = Person("John", 25)
when (person) {is Person -> println("It's a person")else -> println("Not a person")
}
分支条件
- Java 的
switch
语句:case
分支只能是常量表达式,不能是范围或其他复杂的条件。 - Kotlin 的
when
表达式:分支条件可以是常量、范围、类型检查、布尔表达式等,非常灵活。
val score = 85
when (score) {in 0..59 -> println("Fail")in 60..89 -> println("Pass")in 90..100 -> println("Excellent")else -> println("Invalid score")
}
优势总结
- 代码简洁性
- Kotlin 的
when
表达式避免了break
语句的使用,使代码更加简洁易读。同时,无参数的when
可以直接对多个条件进行判断,减少了嵌套的层级,让代码结构更加清晰。
- Kotlin 的
- 灵活性
when
表达式支持更丰富的分支条件,能够处理各种复杂的逻辑判断,无需编写多个if - else
语句,提高了代码的表达能力和可维护性。
- 作为表达式使用
when
在 Kotlin 中可以作为表达式返回值,这使得代码更加紧凑。例如,可以将when
表达式的结果赋值给一个变量。
val num = 2
val result = when (num) {1 -> "One"2 -> "Two"else -> "Other"
}
println(result)
总结:
Kotlin 的 when
表达式在语法结构上比 Java 的 switch
语句更灵活,无需 break
且可无参数,支持的数据类型更广泛,分支条件能是常量、范围、类型检查等复杂形式,还可作表达式返回值,像 when (score) { in 0..59 -> ... }
示例就体现其简洁且能处理复杂逻辑判断的优势。
这是我对第一次面试中kotlin题总结
感谢观看!!!