Kotlin学习笔记(二):Kotlin与Java对比

来源:互联网 发布:淘宝网上卖什么东西销量好 编辑:程序博客网 时间:2024/06/05 09:51

本篇文章我们将通过类比Java语法的方式学习Kotlin的基本语法和常用操作

基本类型

Java Kotlin 位宽 double Double 64 float Float 32 long Long 64 int Int 32 short Short 16 byte Byte 8

注: char在Kotlin不是基本数据类型,是独立的数据类型

String字符串表示

  • Java
String name = "Java";String sex = "Man";String link = "name is :" + name + ",sex is:" + sex; 
  • Kotlin

字符串可以包含模板表达式,即可求值的代码片段,并将其结果连接到字符串中。一个模板表达式由一个 $ 开始并包含另一个简单的名称

val name = "Kotlin"val sex = "man"val link = "name is $name,sex is: $sex"

打印操作

  • Java
System.out.print("Java");System.out.println("Java");
  • Kotlin
print("Kotlin")println("Kotlin")

换行操作

  • Java
String text = "第一行\n第二行\n第三行\n";
  • Kotlin

有两种类型的字符串字面量:

  1. 一种是可以带分割符的。跟Java一样
  2. 一种是不可以包含分割符但可以包含其它字符。 由三个引号包裹(“”“)
val text1 = "第一行\n第二行\n第三行\n"val text = """|第一行|第二行|第三行""".trimMargin()   //去除空格

常量和变量定义

  • Java
final String s = "Java";String name = "Java";int num = 5;
  • Kotlin

var 声明变量
val 声明常量

val s = "Java"var name = "Kotlin"var num = 5

声明静态常量、方法

  • Java
static final String NAME = "name";static final int SEX = 0;static void Test() { }
  • Kotlin

声明静态常量或者方法时,都是使用如下方式声明

companion object {    internal val NAME = "name"    internal val SEX = 0    fun Test() { }}

条件表达式

if语句

  • Java
if( a == b){}if( a>=0 && a <=10){}if( a>0 && a <10){}
  • Kotlin
if( a== b){}if( a in 0..10){}        // 也可以按照Java写法 if( a>=0 && a <=10){}if(a in 1 until 10)      //也可以按照Java写法 if( a>0 && a <10){}

参考Ranges使用

三元运算符

  • Java
int num = a > b ? a :b;
  • Kotlin
val num = if (a > b) a else b

case表达

  • Java
String s;switch(a){    case 0:        s =  "a = 0";        break;    case 1:        s = "a = 1";        break;    default:        s = "default";        break;}
  • Kotlin
val s = when(a){    0 -> "a = 0"    1 -> "a = 1"    else -> "default"}

for循环迭代操作

  • Java
for(int i = 0; i <= 10; i++){}for(int i = 0; i < 10; i++){}for(int i = 10; i < 0; i--){}for(int i = 0; i <= 10 ; i+=2){}for(int i = 10; i < 0; i-=2){}for (String s : listString) {}for (Map.Entry<String, String> entry: map.entrySet()) {}
  • Kotlin

在下面使用的操作使用倒了Kotlin自带的Ranges使用

  1. in 指定范围
  2. until 不包含
  3. downto 倒序
  4. step 指定步数跳跃
for(i in 0.. 10){}for(i in 0 until 10){}for(i in 10 downTo 0){}for(i in 0.. 10 step 2){}for(i in 10 downTo 0 step 2){}for(item in listString){}for ((key, value) in map) { }

参考Ranges使用

集合操作

  • Java
List<String> listString = Arrays.asList("a","b","c");listString.add("d");Map<String,String> map = new HashMap<>();map.put("a","1");map.put("b","2");map.put("c","3");
  • Kotlin
var listString = listOf("a","b","c")listString.add("d")var map = mapOf("a" to "1",               "b" to "2",               "c" to "3")

遍历集合和筛选操作

  • Java
for (String s : listString){     System.out.println(s);}//筛选for (String s: listString){    if(s.equals("a")){        System.out.println(s);    }}
  • Kotlin
listString.forEach {    println(it)}//筛选listString.filter{ it.equals ("a") }        .forEach{            println(it)        }

声明方法

  • 不带返回值方法

    • Java
    void Test(){ }void Test(int a, String b){ }
    • Kotlin
    fun Test(){}fun Test(a : Int, b : String) { }
  • 带返回值方法

    • Java
    int Test() { return 0;}int Test(int a, int b){    if(a > b){        return a;    }    return b;}
    • Kotlin
    fun Test() :Int { return 0}fun Test(a :Int, b :Int) :Int{    if( a > b ){    }    return b}

构造方法

  • Java
class Test{    public Test(){ }    public Test(int a, int b){ }}
  • Kotlin
class Test {    constructor() {}    constructor(a: Int, b: Int) {}}

或者这样写

class Test constructor(){   //constructor 可省略    constructor(a: Int, b: Int) : this() {}}

生成get跟set方法

  • Java
class Test{    String a;    int b;    public Test(String a, int b){        this.a = a;        this.b = b;    }    public String getA() {        return a;    }    public void setA(String a) {        this.a = a;    }    public int getB() {        return b;    }    public void setB(int b) {        this.b = b;    }}
  • Kotlin

只需一行代码

data class Test(val a: String, val b: Int){ }

看完上面的文章,我们可以发现Kotlin语法比Java更加的直观和便捷,但是还是需要一段时间来适应Kotlin的语法习惯。