数据类型
| 语言 | byte | short | int | long | float | double | String | 对象顶级父类 |
|---|---|---|---|---|---|---|---|---|
| Kotlin | Byte | Short | Int | Long | Float | Double | String | Any |
| Kotlin可空 | Byte? | Short? | Int? | Long? | Float? | Double? | String? | Any? |
| java | byte | short | int | long | float | double | String | |
| java 包装类 | Byte | Short | Integer | Long | Float | Double | String | Object |
变量声明
kotlin
可变属性声明语法:
var 变量名称[:具体类型] =默认值
示例:
var name:String="Var"
不可变量声明语法:
val 变量名称[:具体类型] =默认值
示例:
val name:String="Val"
常量声明语法:
const val 变量名称[:具体类型] = 值
示例:
const val env: String = "test"
**注意:const val 的值需要编译期间就能确定,是编译期常量 ,val 的值可以运行期确定,是运行时常量 **
String拼接
kotlin $语法
const val prefix ="Hello "
var a="$prefix World"
java 一般使用StringBuilder和StringBuffer,不直接使用+
数据类
java实现:
public class User{
private String id;
private Integer age;
public void setId(String id){
this.id=id;
}
public String getId(){
return id;
}
public void setAge(Integer age){
this.age=ge;
}
public String getAge(){
return age;
}
}
kotlin实现:
data class User(
var id:String,
var age:Int
)
for
// 区间,左闭右闭区间
// for (i in 1..10) {
// println(i)
// }
// 区间,左闭右闭区间,倒序
// for (i in 10 downTo 1) {
// println(i)
// }
// 区间,左闭右开区间
// for (i in 1 until 10) {
// println(i)
// }
// 区间,左闭右闭区间,步长为2
// for (i in 1..10 step 2) {
// println(i)
// }
// 遍历list
// val list = mutableListOf(1, 2, 3, 4, 5, 6, 7, 8)
// 直接打印value
// for (i in list) {
// println(i)
// }
// 打印index
// for (index in list.indices) {
// println(index)
// }
// 通过index打印value
// for (index in list.indices) {
// println(list[index])
// }
// 遍历map
val map = mutableMapOf("name" to "kotlin", "time" to "2017")
for (entry in map) {
println("${entry.key}: ${entry.value}")
}
switch 和when
java
switch (season) {
case SPRING:
System.out.println("春天");
break;
case SUMMER:
System.out.println("夏天");
break;
case AUTUMN:
System.out.println("秋天");
break;
case WINTER:
System.out.println("冬天");
break;
default:
System.out.println("未知");
}
kotlin
when (season) {
Season.SPRING -> {
println("Spring")
}
Season.SUMMER -> {
println("Summer")
}
Season.AUTUMN -> {
println("autumn")
}
Season.WINTER -> {
println("winter")
}
// 如果将枚举类中的结果枚举完可以不写else分支
else -> {
println("未知")
}
}
函数/方法
语法:
fun 方法名():返回值{
}
Lambda
java 语法
(a,b,c)->{
}
kotlin语法:
{a,b,c-> //最后一行结果默认返回 }
修饰符
| 语言 | 修饰符 | |||
|---|---|---|---|---|
| java | public | protected | private | default |
| kotlin | public | protected | private | internal |
kotlin 移除了java中的default(包权限),新增internal(模块可见)
Class
默认修饰符
java: 默认是default ,想要变成final类添加 final标识
kotlin: 默认是public final ,想要变成open类,添加open标识
继承和实现(extends/implementation)
语法,需要父类使用open修饰
class 派生类:父类(),父接口{
}
static和component object
kotlin中没有static,使用了伴生对象
package compare
class CompanionObject {
companion object{
// 在这个作用域下的方法和变量全部是类级别的,即Java中的 static ,可以通过类名.调用
const val content="component object value"
}
}
fun main() {
println(CompanionObject.content)
}
java 匿名对象和 kotlin 对象表达式
java
public class AnonymousClass {
Thread thread= new Thread(new Runnable() {
@Override
public void run() {
}
});
}
kotlin
class ObjectObject {
val thread=Thread(object : Runnable{
override fun run() {
}
})
}
数组
java
public class ArrayJava {
public static void main(String[] args) {
// 一维数组
int[] nums = {1, 2, 3, 4, 5, 6};
// 二维数组
int [][] array ={{1,2,3},{4,5,6},{7,8,9}};
for (int[] ints : array) {
for (int value : ints) {
System.out.print(value+"\t");
}
System.out.println();
}
}
}
kotlin
fun main() {
// 一维数组
val nums = arrayOf(1, 2, 3, 4, 5, 6)
// 二维数组
val array = arrayOf(
arrayOf(1, 2, 3),
arrayOf(4, 5, 6),
arrayOf(7, 8, 9)
)
for (tmp in array) {
for (value in tmp) {
print("$value \t")
}
println()
}
}