阅读本文前,建议先了解kotlin,  当了解了kotlin 再来看它与java 之间的区别,印象会更加深刻。

打印日志

可以看出,kotlin 打印更简洁

JavaSystem.out.print("Amit Shekhar");
System.out.println("Amit Shekhar");Kotlinprint("Amit Shekhar")
println("Amit Shekhar")

常量与变量

java 中String 变量 直接加String 类型修饰变量,常量需在类型前加 final 关键词 ;  kotlin 中 使用var 关键词表示变量, val 关键词表示常量

JavaString name = "Amit Shekhar";
final String name = "Amit Shekhar";Kotlinvar name = "Amit Shekhar"
val name = "Amit Shekhar"

null声明

kotlin 中,需要在类型后加 ?表示可空,否则报 Null can not be a value of a non-null type String

JavaString otherName;
otherName = null;Kotlinvar otherName : String?
otherName = null

空判断

Java 中直接使用if 语句进行判断是否为空; kotlin 中,则使用?和 扩展函数let 结合的方式,如果判断语句里的代码是对象的引用,则可直接在引用语句中的引用对象后加?号。

Javaif (text != null) {int length = text.length();
}Kotlintext?.let {val length = text.length
}
// or simply
val length = text?.length

字符串拼接

java中,字符串的拼接直接以+ 号将字符串拼接在一起; kotlin 中可可以使用字符模板的形式,即以  $ 模板名称 的形式,给人更简洁规范的感觉。当然kotlin 也可以使用java的方式拼接字符串,但一般不建议这样做。

JavaString firstName = "Amit";
String lastName = "Shekhar";
String message = "My name is: " + firstName + " " + lastName;Kotlinval firstName = "Amit"
val lastName = "Shekhar"
val message = "My name is: $firstName $lastName"

换行

java中 使用 \n来进行换行; kotlin 中原始字符串 使用三个引号"""分界符括起来 ,默认 | 用作边界前缀,作为换行,通过 trimMargin() 函数去除前导空格

JavaString text = "First Line\n" +"Second Line\n" +"Third Line";Kotlinval text = """|First Line|Second Line|Third Line""".trimMargin()

三元表达式

java中使用    判断语句?  是则执行此语句:否则执行这条语句  ;在 Kotlin 中,if是一个表达式,即它会返回一个值。 因此就不需要三元运算符(条件 ? 然后 : 否则)

JavaString text = x > 5 ? "x > 5" : "x <= 5";Kotlinval text = if (x > 5)"x > 5"else "x <= 5"

操作符

java中使用特殊符号来进行位运算 ;在kotlin 中,对于位运算,没有特殊字符来表示,而只可用中缀方式调用具名函数

完整的位运算列表(只用于 Int 与 Long):

  • shl(bits) – 有符号左移
  • shr(bits) – 有符号右移
  • ushr(bits) – 无符号右移
  • and(bits) – 位
  • or(bits) – 位
  • xor(bits) – 位异或
  • inv() – 位非
javafinal int andResult  = a & b;
final int orResult   = a | b;
final int xorResult  = a ^ b;
final int rightShift = a >> 2;
final int leftShift  = a << 2;
final int unsignedRightShift = a >>> 2;Kotlinval andResult  = a and b
val orResult   = a or b
val xorResult  = a xor b
val rightShift = a shr 2
val leftShift  = a shl 2
val unsignedRightShift = a ushr 2

类型判断和转换 (声明式)

Java 中 使用   instanceof 函数 来判断是否为某类型, 类型转换直接在需转换的对象前加(转换的类型) ; kotlin 中 使用 is 运算符检测一个表达式是否某类型的一个实例,  使用 as + 转换类型   方式将对象转换。

Javaif (object instanceof Car) {Car car = (Car) object;
}Kotlinif (object is Car) {var car = object as Car
}

类型判断和转换 (隐式)

kotlin  还可以将 “  as + 转换类型 ” 省略 ,kotlin 会根据上下文自动将对象转换成需要的类型

Javaif (object instanceof Car) {Car car = (Car) object;
}Kotlinif (object is Car) {var car = object // 聪明的转换
}

多重条件

java中判断一个数值是否在唉某个区间,一般使用 >= 和  <=  来判断; 在kotlin 中使用  in  初始值..最终值  方式来判断

Javaif (score >= 0 && score <= 300) { }Kotlinif (score in 0..300) { }

更灵活的case语句

java 中 switch 每个case 语句都需要分开写,条件成立后使用break来跳出判断 ;kotlin  中 when 表达式取代了类 C 语言的 switch 语句,when 将它的参数与所有的分支条件顺序比较,直到某个分支满足条件

Javaint score = // some score;
String grade;
switch (score) {case 10:case 9:grade = "Excellent";break;case 8:case 7:case 6:grade = "Good";break;case 5:case 4:grade = "OK";break;case 3:case 2:case 1:grade = "Fail";break;default:grade = "Fail";
}Kotlinvar score = // some score
var grade = when (score) {9, 10 -> "Excellent"in 6..8 -> "Good"4, 5 -> "OK"in 1..3 -> "Fail"else -> "Fail"
}

for循环

java 中 使用>=< 符号表示范围  ;  kotlin 使用 in  、until 、 downto 、表示范围,

Javafor (int i = 1; i <= 10 ; i++) { }for (int i = 1; i < 10 ; i++) { }for (int i = 10; i >= 0 ; i--) { }for (int i = 1; i <= 10 ; i+=2) { }for (int i = 10; i >= 0 ; i-=2) { }for (String item : collection) { }for (Map.Entry<String, String> entry: map.entrySet()) { }Kotlinfor (i in 1..10) { }   //闭区间:包含 10for (i in 1 until 10) { } // 半开区间:不包含 10for (i in 10 downTo 0) { }for (i in 1..10 step 2) { }for (i in 10 downTo 0 step 2) { }for (item in collection) { }for ((key, value) in map) { }

更方便的集合操作

Javafinal List<Integer> listOfNumber = Arrays.asList(1, 2, 3, 4);final Map<Integer, String> map= new HashMap<Integer, String>();
map.put(1, "Amit");
map.put(2, "Ali");
map.put(3, "Mindorks");// Java 9
final List<Integer> listOfNumber = List.of(1, 2, 3, 4);final Map<Integer, String> keyValue = Map.of(1, "Amit",2, "Ali",3, "Mindorks");Kotlinval listOfNumber = listOf(1, 2, 3, 4)
val keyValue = mapOf(1 to "Amit",2 to "Ali",3 to "Mindorks")

遍历

可以看出,java 版本一直在改进,但相比kotlin 还是稍微复杂些。

Java// Java 7 and below
for (Car car : cars) {System.out.println(car.speed);
}// Java 8+
cars.forEach(car -> System.out.println(car.speed));// Java 7 and below
for (Car car : cars) {if (car.speed > 100) {System.out.println(car.speed);}
}// Java 8+
cars.stream().filter(car -> car.speed > 100).forEach(car -> System.out.println(car.speed));Kotlincars.forEach {println(it.speed)
}cars.filter { it.speed > 100 }.forEach { println(it.speed)}

方法定义

kotlin  使用 fun 关键词 表示方法, 使用 vararg 关键词表示 可变参数。

Javavoid doSomething() {// logic here
}void doSomething(int... numbers) {// logic here
}Kotlinfun doSomething() {// logic here
}fun doSomething(vararg numbers: Int) {// logic here
}

带返回值的方法

java 中返回值类型写在方法名前, 并使用 return 关键词 返回; kotlin  中返回值类型写在方法名后,并在返回类型前加 :符号,可使用return 关键词返回值,也可不使用

Javaint getScore() {// logic herereturn score;
}Kotlinfun getScore(): Int {// logic herereturn score
}// as a single-expression functionfun getScore(): Int = score

无结束符号

java中,使用;来表示语句结束  ;   kotlin 中不需要类似的结束符来表示

Javaint getScore(int value) {// logic herereturn 2 * value;
}Kotlinfun getScore(value: Int): Int {// logic herereturn 2 * value
}// as a single-expression functionfun getScore(value: Int): Int = 2 * value

constructor 构造器

java中 使用类名(参数)的方式来创建构造器,类中的方法必须是静态方法外部才能调用访问;  在 Kotlin 中的一个类可以有一个主构造函数以及一个或多个次构造函数。主构造函数是类头的一部分:它跟在类名(与可选的类型参数)后,companion伴生对象是个实际对象的单例实例

Javapublic class Utils {private Utils() { // This utility class is not publicly instantiable }public static int getScore(int value) {return 2 * value;}}Kotlinclass Utils private constructor() {companion object {fun getScore(value: Int): Int {return 2 * value}}
}// another wayobject Utils {fun getScore(value: Int): Int {return 2 * value}}

Get Set 构造器

java一般在数据实体类中提供构造器,一堆set /get 方法,equals ,hascode, tostring  ;     在kotlin 一行代码就搞定,有没有被惊到?!!!

Javapublic class Developer {private String name;private int age;public Developer(String name, int age) {this.name = name;this.age = age;}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;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Developer developer = (Developer) o;if (age != developer.age) return false;return name != null ? name.equals(developer.name) : developer.name == null;}@Overridepublic int hashCode() {int result = name != null ? name.hashCode() : 0;result = 31 * result + age;return result;}@Overridepublic String toString() {return "Developer{" +"name='" + name + '\'' +", age=" + age +'}';}
}Kotlin
data class Developer(val name: String, val age: Int)

原型扩展

java中定义普通的函数作为原型的扩展; kotlin 中以 返回类型.扩展函数名()的方式进行扩展

Javapublic class Utils {private Utils() { // This utility class is not publicly instantiable }public static int triple(int value) {return 3 * value;}}int result = Utils.triple(3);Kotlinfun Int.triple(): Int {return this * 3
}var result = 3.triple()

通过比较,你会慢慢欣赏这个新生代的

Kotlin 与 Java 比较相关推荐

  1. 开发Android应用用Kotlin还是Java?

    还记得多年前有关Android与iOS孰优孰劣的辩论吗?如今,Kotlin与Java的争论,时常广泛地发生在开发人员之中.不过,由于大家往往关注的是Java所不具备的Kotlin功能,因此他们的结论可 ...

  2. 《From Java To Kotlin》-Kotlin与Java的简单对比

    前言: 原文来自https://github.com/MindorksOpenSource/from-java-to-kotlin 本文也只是简单比较kotlin与java的不同之处,实际学习kotl ...

  3. 【Kotlin】apply 内联扩展函数 ( apply 函数原型 | apply 函数示例 | Kotlin 调用 Java API )

    文章目录 I . 内联扩展函数 apply II . Kotlin 调用 Java API III . apply 内联扩展函数示例 ( 调用 Java API 处理图像 ) I . 内联扩展函数 a ...

  4. kotlin与java对比

    为什么80%的码农都做不了架构师?>>>    kotlin作为一个现代的适用于多平台的静态类型语言越来越受到java开发同学的喜爱,尤其是android开发同学的喜爱,下面从几个方 ...

  5. Kotlin极简教程:第10章 Kotlin与Java互操作

    Kotlin is 100% interoperable with Java™ and Android™ 在前面的章节中,我们已经学习了Kotlin的基础语法.类型系统.泛型与集合类.面向对象与函数式 ...

  6. Kotlin 与 Java有什么区别(最全最新的)

    目录 什么是Kotlin? 什么是Java? 主要区别: Kotlin 的特点 Java的特点 Kotlin 的历史 JAVA的历史 Kotlin 和 Java 的区别 Kotlin 的优势 Java ...

  7. Kotlin与Java之争

    Kotlin \\ Kotlin是一门相对比较新的JVM语言,JetBrains自2011年以来一直在积极地开发. \\ 多年来,该语言在Android社区受到的关注度越来越高,并在Google IO ...

  8. 入门 Kotlin 和 Java 混合开发

    一.前沿 如果你学习过其他的编程语言,你就会发现 Java 的语法很是哆嗦,可是我们为什么没有放弃 Java 这门编程语言呢?因为 JVM 是一个非常好的平台,而且 Java 程序员目前在中国所占的比 ...

  9. kotlin和java差别_Kotlin和Java的常用方法的区别总结

    一.kotlin和java的常用语法区别 1).类.public class.public final class java 1 2public final class User{ } 1 2publ ...

  10. Kotlin和Java混合开发总结(基于Kotlin1.3.0版本)

    我本来是不想学习kotlin的,但是现在的形势,很多公司都在使用kotlin开发,可以说学会kotlin也是无奈之举,既然是潮流,谷歌也在大力推广,所以还是只能硬着头皮逼迫自己学一下,也能更快适应公司 ...

最新文章

  1. 拟合一条曲线_数据预测与曲线拟合
  2. Java Formatter format()方法及示例
  3. hdu 4055 hdu 4489 动态规划
  4. 有人说中文编辑是解决中国程序员编程效率的秘密武器,请问他是一个银弹吗?...
  5. 7个使用JavaScript构建数据可视化的实用工具库,希望你能喜欢
  6. IntelliJ IDEA 2018 破解 汉化教程地址
  7. 深入PHP使用技巧之变量
  8. 面向对象程序设计概述(金老师第一讲)
  9. python三本经典书籍-《python编程入门经典》python之父推荐这三本书让你更快入门...
  10. windows11iis如何安装?
  11. android 截屏 简书,Android基础 截屏ScreenCapture
  12. Securing Checklists
  13. torchdiffeq中odeint函数的输入输出参数分析
  14. Jupyter Notebook 更改默认浏览器
  15. 什么是Java api
  16. 怎么用真机测试android,andriod studio如何使用真机测试 andriod studio真机测试教程
  17. android仿简书编辑器,自己写一个类似知乎编辑器的编辑器(3)
  18. HTML中label标签的用途
  19. 计算机辅助分析 论文,计算机辅助设计论文要求分析.doc
  20. arduino 土壤温湿度传感器_Arduino 与 土壤湿度传感器 测量土壤湿度自动浇水提醒...

热门文章

  1. Kingbase金仓查看表空间占用率
  2. DotNetBar 中 SuperGridControl 加载数据、获取数据、设置样式
  3. 写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好(附代码)
  4. 解决bash: mysql: command not found 的方法
  5. Memcached安装和基本使用
  6. Leetcode 912.排序算法(快排)
  7. 126.数据链路层有哪些协议?
  8. Cortex-A、Cortex-R、Cortex-M处理器的性能比较
  9. 梳理十年Kaggle竞赛,看自然语言处理的变迁史
  10. CentOS 7 网络连接优先由与无线问题解决