前言
本文的基础概览简单介绍了kotlin与java的总体区分,后期将持续完善。
基础概览 | 类型 | kotlin | java | 相同点 |
包的定义与导入 | 目录与包的结构无需匹配: 源代码可以在文件系统的任意位置 | 目录与包的结构需匹配 | package my.demo import kotlin.text.* | |
程序入口点 | fun main() { println("Hello world!") } | public static void main(String[] args){ System.out.println("test"); } | ||
函数定义 | fun sum(a: Int, b: Int): Int { return a + b } | public int sum(int a,int b){ return a+b; } | ||
变量的定义 | 定义只读局部变量使用关键字 val 定义。 只能为其赋值一次。 val a: Int = 1 // 立即赋值 val b = 2 // 自动推断出 `Int` 类型 val c: Int // 如果没有初始值类型不能省略 c = 3 // 明确赋值 | 采用final实现 | ||
可重新赋值的变量使用 var 关键字。 var x = 5 // 自动推断出 `Int` 类型 x += 1 | 常规实现 | |||
注释 | —— | —— | // 这是一个行注释 /* 这是一个多行的 块注释。 */ | |
条件表达式 | 缺少二元及三元判断,新增when判断 fun describe(obj: Any): String = when (obj) { 1 -> "One" "Hello" -> "Greeting" is Long -> "Long" !is String -> "Not a string" else -> "Unknown" } | —— | if/else | |
循环 | —— | —— | while 循环 | |
1.新增range概念,类似于python中for循环: (1)没有index val items = listOf("apple", "banana", "kiwifruit") for (item in items) { println(item) } (2)含index val items = listOf("apple", "banana", "kiwifruit") for (index in items.indices) { println("item at $index is ${items[index]}") } 2.增强forEach (1)常规forEach items.forEach { } (2)增强forEach items.forEachIndexed { index, s -> } | (1)for(int i=0;i< items.length;i++){ } (2)for(String item:items){ } | |||
创建类及基本类 | val rectangle = Rectangle(5.0, 2.0) val triangle = Triangle(3.0, 4.0, 5.0) | 关键字new: Object object = new Object() |
总类 | 条目 | kotlin | Java | 相同点 |
基本类型 | 数字 | 基本面向对象去除掉Java中的int、byte、short等基本型 1.Byte (8位 范围-128~127) 2.Short (16位 范围-32768~ 32767) 3.Int (32位 范围 -2,147,483,648 (-2^31)~ 2,147,483,647 (2^31 - 1) 4.Long (64位 范围-9,223,372,036,854,775,808 (-2^63) ~9,223,372,036,854,775,807 (2^63 - 1) 5.Float (32位 有效24) 6.Double (64位 有效53) 7.转换(支持显示装换与隐式装换) toByte(): Byte toShort(): Short toInt(): Int toLong(): Long toFloat(): Float toDouble(): Double toChar(): Char 8.数字支持下划线分隔易读 val creditCardNumber = 1234_5678_9012_3456L 9.支持可空引用(如 Int?)或泛型 | 1-6:比kotlin多了基本型(如short:首字母小写) 7.采用parseInt或者Integer.valueOf(*) | 1.取值范围 2.四则运算 3.位运算 4.浮点比较 |
字符 | 1.字符用 Char 类型表示。它们不能直接当作数字 | |||
布尔 | 1.布尔用 Boolean 类型表示,它有两个值:true 与 false 若需要可空引用布尔会被装箱。 内置的布尔运算有: || – 短路逻辑或 && – 短路逻辑与 ! - 逻辑非 | 与kotlin不同的形式boolean基本型 | ||
数组 | 1.数组在 Kotlin 中使用 Array 类来表示,它定义了 get 与 set 函数(按照运算符重载约定这会转变为 [])以及 size 属性,以及一些其他有用的成员函数 2.库函数arrayOf() 来创建一个数组并传递元素值给它, 这样 arrayOf(1, 2, 3) 3.引入类型投影,Kotlin 中数组是不型变的(invariant)。 这意味着 Kotlin 不让我们把 Array<String> 赋值给 Array<Any>,以防止可能的运行时失败 (但是你可以使用 Array<out Any> 4.原数组ByteArray、 ShortArray、IntArray | int[] array = {1,2,3} | ||
无符号整型 | 与C,C++语言中unit类似 | |||
字符串 | 1.字符串用 String 类型表示。字符串是不可变的。 字符串的元素——字符可以使用索引运算符访问: s[i] 2.引入字符模板,在想使用‘+’时优先使用它。 3.原始字符串 使用三个引号(""")分界符括起来, 内部没有转义并且可以包含换行以及任何其他字符,就类似于多行注释。 | —— | 对字符串的操作 基本保持不变 |