本篇文章主要对比Java跟Kotlin的基本语法在写法上的区别。不管学习何种语言,学习它的基本语法都是第一步。html
1、分号;
2、定义变量、常量
3、字符串模板与字符串面值
4、自动类型转换
5、定义函数
6、注释
7、控制流
8、集合java
在Java中,使用分号;
标志一句完整代码的结束。 在Kotlin中,一句代码结束后不用添加分好。数组
Java定义变量时把数据类型放在前面,变量名放在后面。bash
int a = 1;
int b;
b = 2;
复制代码
Kotlin用var
定义变量,把数据类型放在后面,并用冒号:
隔开。微信
var a: Int = 1
var b: Int
b = 2
复制代码
Java用final
定义常量,把final
放在数据类型前面。函数
final int a = 1;
final int b;
b = 2;
复制代码
Kotlin用val
定义常量,把数据类型放在后面,并用冒号:
隔开。post
val a: Int = 1
val b: Int
b = 2
复制代码
1.字符串模板 在Kotlin中,字符串能够包含模板表达式 ,即一些小段代码,会求值并把结果合并到字符串中。 模板表达式以美圆符($)开头,由一个简单的名字构成,如:学习
var a: String = "a"
var b: String = "b"
var c: String = "$a$b"
复制代码
上面几行代码在Java中就等于ui
String a = "a";
String b = "b"
String c = a + b
复制代码
2.字符串字面值 Kotlin有两种字符串面值,转义字符串和原生字符串。this
var a: String = "a"
var b: String = "b"
Toast.makeText(this, "$a\n$b", Toast.LENGTH_SHORT).show()
复制代码
运行代码:
var a: String = "a"
var b: String = "b"
var c: String = """ $a $b """
Toast.makeText(this, c, Toast.LENGTH_SHORT).show()
复制代码
运行代码:
能够看到前面有一段空格,这个时候能够经过trimMargin() 函数去除前导空格:
var a: String = "a"
var b: String = "b"
var c: String = """ |$a $b """.trimMargin()
Toast.makeText(this, c, Toast.LENGTH_SHORT).show()
复制代码
运行代码:
如上面例子所示,在须要去掉前导空格的那一行前面加上竖杠"|",再调用trimMargin()方法,就能够去掉前导空格。
Kotlin在定义变量或者常量时给他赋值,能够不指定他的类型,如:
var a = "aaa" //这里的a是String类型
val b = 1 //这里的b是Int类型
复制代码
Java定义无返回值无参数方法,返回类型是void
void abc() {}
复制代码
Kotlin定义无返回值无参数函数,返回Unit
fun abc(): Unit{}
复制代码
也能够什么都不返回
fun abc(){}
复制代码
能够看到Kotlin返回值的类型在函数末尾指定,并用冒号:
分隔。
Java定义无返回值有参数方法,返回类型是void
void abc(String str) {}
复制代码
Kotlin定义无返回值有参数函数,返回Unit(或不返回)
fun abc(str: String) {}
复制代码
括号里的参数跟定义变量常量同样,先指定参数名,再指定参数类型,并用冒号:
分隔。
Java定义有返回值有参数方法,返回类型是String
String abc(String str) {
return "";
}
复制代码
Kotlin定义有返回值有参数函数,返回类型是String
fun abc(str: String): String {
return ""
}
复制代码
返回值的类型在函数末尾指定,并用冒号":"分隔。
单行注释 Java跟Kotlin同样 //单行注释
多行的块注释
Java跟Kotlin均可以这样
/* 这是一个多行的
块注释。 */
复制代码
Kotlin块注释支持嵌套,代码以下:
/*
这是一个多行的
块注释。
/*再嵌套一个
块注释 */
*/
复制代码
而Java不支持块注释嵌套
Kotlin和Java中的条件语句用法大体相同,其中不一样的是Kotlin中的if语句自己就是表达式,有返回值,相似于Java的三元表达式,以下所示: Java三元表达式
c = a > b ? 3 : 4;//若是a>b,c=3,不然c=4
复制代码
对应的Kotlin中的if表达式
var c = if (a > b) 3 else 4
复制代码
若是 if 或 else 后面是代码块的话
var c = if (a > b) {
3
} else {
4
}
复制代码
Kotlin中没有Java的switch语句,取而代之的是更强大的when语句,以下所示: Java中的switch语句
int a = 0;
switch (a) {
case 0:
break;
case 1:
break;
default:
break;
}
复制代码
Kotlin中对应的when语句
var a = 0
when (a) {
0 -> {}
1 -> {}
else -> {}
}
复制代码
注意:when语句在知足条件的分支执行后,会终止when语句执行,因此不用像switch语句那样每个case都加上break。 若是不少分支须要用相同的方式处理,when语句能够把多个分支条件放在一块儿,用逗号,
分隔,以下所示:
var a = 0
when (a) {
0 -> {}
1,2 -> {//若是a=1或a=2,执行该代码块}
else -> {}
}
复制代码
when语句还能像if语句那样做为表达式:
var a = 1
var b = when (a) {
0 -> 0 //若是a=0,则b=0
1 -> 1 //若是a=1,则b=1
else -> 2 //若是a=其余,则b=2
}
复制代码
当咱们要判断5是否在1-10里面,在Java中能够这么写
int a = 5;
for (int i = 0; i < 10; i++) {
if (i == a) {
return true;
} else {
return false;
}
}
复制代码
若是一样的判断用Kotlin来写,能够用关键字in
来判断
if (5 in 1..10){//1..10表明1-10的意思
return true
}else{
return false
}
复制代码
在Kotlin中能够用关键字is
判断对象的类型,以下所示:
fun hasPrefix(x: Any) = when(x) {//kotlin中全部类都有一个共同的父类: Any
is String -> {//若是x是String类型,执行该代码块}
is Int -> {//若是x是Int类型,执行该代码块}
else -> false
}
复制代码
注意上面出现了Any
,Any
是Kotlin中全部类都有一个共同的父类,有点像Java中的Object
,但这个类不是java.lang.Object,这个类只有equals()、 hashCode()、toString()方法。
若是你想要经过索引遍历一个数组或者一个list,可使用for循环,以下所示: Java代码
for (int i = 0; i < array.size(); i++) {
System.out.println(i);
}
复制代码
Kotlin代码
for (i in array.indices) {
println(array[i])
}
复制代码
除了普通的用法以外,Kotlin的for循环还能够这样:
for ((index, value) in array.withIndex()) {
println("the element at $index is $value")
//index是索引,value是值
}
复制代码
Java跟Kotlin的while循环是同样的,分为while和do...while:
var i = 0
while(i++ < 10){
}
do{
}while(i++<10){
}
复制代码
Java中的List,Set,Map:
List<Integer> integers = new ArrayList<>();
integers.add(1);
integers.add(2);
integers.add(3);
integers.remove(1);
integers.get(2);
integers.clear();
Map<String, Integer> map = new HashMap<>();
map.put("1", 1);
map.put("2", 2);
map.put("3", 3);
map.remove("1");
map.get("2");
map.clear();
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
set.remove(1);
set.contains(2);
set.clear();
复制代码
Kotlin也有List,Set,Map,但Kotlin中的List,Set,Map都是不可修改的
下面介绍一些Kotlin经常使用建立集合对象的函数: listOf:用于建立List对象
var list: List<Int> = listOf<Int>()
复制代码
setOf:用于建立Set对象
var set: Set<Int> = setOf<Int>()
复制代码
mapOf:用于建立Map对象
var map: Map<String, Int> = mapOf<String, Int>()
复制代码
mutableListOf:用于建立MutableListOf对象
var mutableList: MutableList<Int> = mutableListOf()
mutableList.add(1)
mutableList.add(2)
mutableList.add(3)
mutableList.remove(1)
mutableList.get(2)
mutableList.clear()
复制代码
mutableSetOf:用于建立MutableSetOf对象
var mutableSet: MutableSet<Int> = mutableSetOf()
mutableSet.add(1)
mutableSet.add(2)
mutableSet.add(3)
mutableSet.remove(1)
mutableSet.contains(2)
mutableSet.clear()
复制代码
mutableMapOf:用于建立MutableMapOf对象
var mutableMap: MutableMap<String, Int> = mutableMapOf()
mutableMap.put("1", 1)
mutableMap.put("2", 2)
mutableMap.put("3", 3)
mutableMap.remove("1")
mutableMap.get("2")
mutableMap.clear()
复制代码
本篇文章主要对比了Java跟Kotlin的基本语法在写法上的区别。会了基本语法,就等于踏出了从Java转到Kotlin的第一步。
参考文献:
Kotlin语言中文站、《Kotlin程序开发入门精要》
推荐阅读:
从Java到Kotlin(一)为何使用Kotlin
从Java到Kotlin(二)基本语法
从Java到Kotlin(三)类和接口
从Java到Kotlin(四)对象与泛型
从Java到Kotlin(五)函数与Lambda表达式
从Java到Kotlin(六)扩展与委托
从Java到Kotlin(七)反射和注解
从Java到Kotlin(八)Kotlin的其余技术
Kotlin学习资料总汇
更多精彩文章请扫描下方二维码关注微信公众号"AndroidCzh":这里将长期为您分享原创文章、Android开发经验等! QQ交流群: 705929135