1. 变量声明与初始化
Java:
String name = null; // 声明并赋值为null
name = "Alice"; // 后续初始化
Kotlin:
var name: String? = null // 可空变量声明与初始化
name = "Alice" // 后续赋值
或更简洁地使用类型推断:
var name = "Alice" // 直接初始化,编译器自动推断类型为String
2. 数据类与解构声明
Java:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// getters, setters, equals(), hashCode()...
}
Person person = new Person("Bob", 30);
String name = person.getName();
int age = person.getAge();
Kotlin:
data class Person(val name: String, val age: Int)
val person = Person("Bob", 30)
val (name, age) = person // 解构声明,直接提取属性
3. 扩展函数
Java:
public class StringUtils {
public static String capitalize(String s) {
return Character.toUpperCase(s.charAt(0)) + s.substring(1);
}
}
String capitalized = StringUtils.capitalize("hello");
Kotlin:
fun String.capitalize(): String {
return this.first().toUpperCase() + substring(1)
}
val capitalized = "hello".capitalize() // 直接在String上调用扩展函数
4. 空安全与 Elvis 操作符
Java:
String value = map.get("key");
if (value != null) {
System.out.println(value.length());
} else {
System.out.println("Value is null");
}
Kotlin:
val value = map["key"] ?: "Value is null"
println(value.length)
5. 链式调用与安全调用
Java:
if (person != null && person.getAddress() != null) {
String city = person.getAddress().getCity();
}
Kotlin:
val city = person?.address?.city ?: "Unknown" // 安全调用链,避免空指针异常