基本类型
数字类型中不会自动转型,例如,你不能给Double变量分配一个Int。如果必须分配,就需要给Int做一个类型转换。
字符不能作为一个数字类处理,如果需要,要先转换成Int类型来操作。
位运算
java中我们使用 | 和& 来表示“或”和“并且”。kotlin中我们使用 or 和 and 来表示“或”和“并且”。
声明变量的时候要写明类型,但也不是必须这样。
val a=12 这样编译器也可以推断出a的类型。
一个字符串可以像数组那样访问,并且可以被迭代
变量
变量有可变(var)和不可变(val)变量两种。val变量和java种的final很相似。
不可变变量意味着它在实例化之后就不能再去改变他的状态了,这让编码更加健壮和预估性。可变变量,在任何地方都可以访问这个变量对象的代码,并修改它,可能会影响程序的其他地方。
不可变变量也可以说是线程安全的,因为他无法去改变,也不需要去定义访问控制,因为所有线程访问的对象都是同一个。
尽可能的使用val。
属性
kotlin种的属性的定义和使用更为简单。
如果没有指定,属性会默认使用getter和setter,当然你也可以将其修改为自定义的代码。
如果需要在getter和setter中访问这个属性自身的值,它需要创建一个 backing field。可以使用field这个预留的字段来访问,他会被编译器找到正在使用的并自动创建,需要注意的是,如果我们直接调用了属性,那我们会使用setter和getter而不是直接访问这个属性。backing field只能在属性访问器内访问。
当操作java代码时,kotlin将允许使用属性的语法去访问在java文件中定义的getter/setter方法。编译器会直接找到它最原始的getter/setter方法。所以当我们直接访问属性的时候不会有性能开销。