基本类型
- 数字类型中不会自动转型
val sum1: int = 10
val sum2: double = sum1.toDouble()
- 字符(Char)不能直接作为一个数字来处理
- 位运算不同(变得更加清晰)
java 下表示 flag | flag1a
flag & flag1
kotlin 下表示 flag or flag1
flag and flag1
- 可以写具体的类型也可以使用val来弱类型(让编译器自己去判断类型)
val v = 12 //is int
val v1 = 12.0 //is a float
val v2 = "sample"//is a String
val v3 = ActionBar // is a object
- String可以像数组一样访问,并且可以被迭代
val v = "simple"
val v1 = v[3]
for(v1 in v ){
print(v1);
}
变量
- 分可变变量(var)和不可变变量(val)
相对的:存在不可变对象和可变对象,可变对象在实例化之后还可以修改,而不可变对象实例化后不可以修改,这样可以使所有线程访问的都是同一个对象,所以说不可变对象是线程安全的。
一个重要的概念就是:尽可能去使用不可变量(val),不得已的情况下才去使用(var)
- 使用范型需要指明出来
val v : Any = 23
val v1 : Context = MainActivity
属性
- 相比java中bean 的写以及用法,kotlin会显得更加简洁些
java:
public class Person{
String name = "";
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
Person p = new Person();
p.setName("xiao hui");
String name = p.getName();
kotlin:
class Person{
val name : String = ""
}
(备注:默认的情况下kotlin会调用set和get方法,当然你也可以修改成你想要的代码)
val p = person()
p.name = "xiao hui "
String name = p.name
- 当你需要使用到属性自己的值,可以使用kotlin预留字段field(backing field只能在属性访问器内访问)
当操作Java代码的时候,
Kotlin将允许使用属性的语法去访问在Java文件中定义的getter/setter方法。
编译器会直接链接到它原始的getter/setter方法。
所以当我们直接访问属性的时候不会有性能开销。