Kotlin中,一切都是对象,和Java相比,不存在java中原始基本类型等。这种特点使我们操作更加容易:可以使用统一的方式来处理所有的可用的类型。
—-基本类型——
像Integer,float或者boolean等基本数据类型仍然存在,但全都作为对象存在。基本类型及操作方式与Java极为相似的,我们要考虑到的区别有:
//数字类型不会自动转型。不能给Double变量分配一个Int。必须要做明确的类型转换,可以使用众多的函数之一,如:
vali:Int=7
val d:Double=i.toDouble()
//字符(Char)不能直接作为一个数字来处理。需要把他们转换为 一个数字,如:
valc:Char='c'
val i:Int = c.toInt()
//位运算也有一点不同。在Android中,我们经常在 flags 中使用“或”,所以我 使用"and"和"or来举例:
//Java中位运算
int bitwiseOr = FLAG1 | FLAG2; int bitwiseAnd = FLAG1 & FLAG2;
//Kotlin中位运算
val bitwiseOr = FLAG1 or FLAG2 val bitwiseAnd = FLAG1 and FLAG2
当然还有很多其他的位操作符,比如 sh1 ,shs,ushr或inv等。可以在Kotlin官网查看。
Kotlin中定义变量时,数据类型不是必须定义的,我们可以让编译器自己去推断出
具体的类型,如:
val j = 12 // Int类型
val iHex = 0x0f // 一个二进制的Int类型
val l = 3L // Long类型
val d = 3.5 // Double类型
val f = 3.5F // Float类型
*上面的变量我们都没有在定义的时候指定数据类型,但Kotlin会判断出你定义的相应数据类型。
—–Kotlin变量—–
变量可以简单地定义成可变(var)和不可变(val)的两种类型的变量。这个与Java中的final相似。不可变在Kotlin(和其它很多现代语言)中是很重要的概念。
- 不可变对象意味着它在实例化之后就不能再去改变它的状态了。如果你需要一 个这个对象修改之后的版本,那就会再创建一个新的对象。这个让编程更加具有健壮性和预估性。Java中大部分的对象是可变的,那就意味着任何可以访问它这 个对象的代码都可以去修改它,从而影响整个程序的其它地方。
- 不可变对象也可以说是线程安全的,因为它们无法去改变,也不需要去定义访问控 制,因为所有线程访问到的对象都是同一个。所以在Kotlin中,如果我们想使用不可变性,我们编码时思考的方式需要有一些改 变。
- 一个重要的概念是:尽可能地使用 val 。除了个别情况(特别是在Android 中,有很多类我们是不会去直接调用构造函数的),大多数时候是可以的。
val s = "Example" //定义String类型
val i = 23 // Int类型
val actionBar = supportActionBar // 定义ActionBar
如果我们需要使用更多的范型类型,则需要指定:
val a: Any = 23
val c: Context = activity
—-变量对应属性——
属性与Java中的字段是相同的,但是更加强大。属性做的事情是字段加上getter加 上setter。来比较他们的不同之处。这是Java中字段安全访问和 修改所需要的代码:
//java中定义一个类,并写get和set方法
public class Person {
private String name;
public String getName() {
return name;
public void setName(String name) {
this.name = name;
}
}
在java中使用我们定义好的Person类
Person person=new Person();
person.setName("name");
String name=person.getName();
同样的功能,用Kotlin实现:
//在Kotlin中,只需要一个属性就可以
public class Person {
var name: String = ""
}
注:Kotlin如果没有任何指定,属性会默认使用getter和setter
kotlin中使用定义好的Person类:
val person = Person()
person.name = "name"
val name = person.name
另外当Kotlin操作Java代码的时候,Kotlin将允许使用属性的语法去 访问在Java文件中定义的getter/setter方法。
编译器会像往常一样使用它的 getter/setter方法。所以当我们直接访问属性的时候不会有性能开销。
当然还有更多的特点,我们可以参考Kotlin官网:http://kotlinlang.org/。
博客学习来自《Kotlin for Android Developers》中文翻译。