Kotlin相比Java 的优势主要有:

  • 更加易表现:Kotlin最重要的优点之一。开发相同功能你可以少写很多的代码。
  • 更加安全:Kotlin是空安全的,就是说在编译时期就处理了各种null的情况,避免了执行时异常。如果一个对象可以是null,则我们需要明确地指定 它,然后在使之前检查是否是null。可以节约很多调试nullPointException的时间并解决相应的bug。
  • 函数式的:Kotlin是基于面向对象的语言。使用了很多函数式编程的概念,比如,使用lambda表达式来更方便地解决问题。其中一个很棒的特性就是Collections的处理方式。
  • 可以扩展函数:意味着我们可以扩展类的更多的特性,甚至我们没有权限去访问这个类中的代码。
  • 高度互操作性的:可以继续使用所Java写的代码和库,因为两 个语言之间的互操作性是完美的。甚至可以在项目中使用Kotlin和Java混合编程。
    以下针对部分特点举例:

—特点一:易表现——-
比如我们用java写一个实类,通常我们要定义变量及对应的set及get方法等 ,如:

public class Student {
    private String name;//姓名
    private int age;//年龄
    private String hobby;//爱好

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getHobby() {
        return hobby;
    }

    public void setHobby(String hobby) {
        this.hobby = hobby;
    }
}

但是使用Kotlin,我们只要写这样几句代码就可以:

class Student(var name: String, var age: Int, var hobby: String)
//这样就会自动生成所有属性和对应访问器,以及一些有用的方法,比如:get,set及  toString()等

—-选点2:更安全——
Kotlin 类型系统中可以为空和不可为空的引用是不同的。

//普通的 String 类型的变量不能为空
var str: String ="abc"
str = null //编译错误
//允许为空,我们必须把它声明为可空的变量:
var b: String? = "abc"
b = null
//可以调用 a 的方法,而不用担心nullPoint异常了:
val l = a.length()
//如果你想使用 b 调用同样的方法就有可能报错了:
val l = b.length() //错误:b 不可为空

更多安全性可以参考http://kotlindoc.com/Other/Null-Safety.html

—特点三:函数式的——-

每当声明一个监听事件,可以只定义我们需要做些什么,而不是需要去创建一个新的Listener。这个的实现需要感谢lambda的使用:
//函数式支持(Lambdas)
view.setOnClickListener {
    toast("Hello    world!")    
}

—-特点四:可以扩展函数——
可以给任何类添加函数。它比那些我们项目中典型的工具类更加具有可读性。 举个例子,我们可以给fragment增加一个显示toast的函数:

fun Fragment.toast(message: CharSequence,   duration:   Int =   Toast.LENGTH_SHORT)     {
        Toast.makeText(getActivity(),   message,    duration).show() 
}
//我们现在可以这么做:
fragment.toast("Hello   world!")

当然还有更多的特点,我们可以参考Kotlin官网:http://kotlinlang.org/