kotlin与java的区别[通俗易懂]

kotlin与java的区别[通俗易懂]Kotlin简介:Kotlin是一个基于JVM的新的编程语言,由JetBrains开发。Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。JetBrains,作为目前广受欢迎的JavaIDEIntelliJ的提供商,在Apache许可下已经开源其Kotlin编程语言。Kotlin已正式成为Android官方开发语言。通过上面的简介,我们对Kotlin也有了大概了认知,Kotlin作为新的一种语言,可以运行在JVM上面,那么它

大家好,又见面了,我是你们的朋友全栈君。

Kotlin 简介:

Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发。
Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。
JetBrains,作为目前广受欢迎的Java IDE IntelliJ 的提供商,在 Apache 许可下已经开源其Kotlin 编程语言。Kotlin已正式成为Android官方开发语言。

通过上面的简介,我们对Kotlin也有了大概了认知,Kotlin作为新的一种语言,可以运行在JVM上面,那么它的优点是什么呢?

Kotlin优点:

Kotlin是使用Java开发者的思维被创建的,Intellij作为它主要的开发IDE。对于 Android开发者,有两个有趣的特点:

1.对Java开发者来说,Kotlin是非常直觉化的,并且非常容易学习。语言的大部 分内容都是 与我们知道的非常相似,不同的地方,它的基础概念也能迅速地掌 握它。

2.它与我们日常生活使用的IDE无需配置就能完全整合。Android Studio能够非常 完美地理解、编译运行Kotlin代码。而且对这门语言的支持来正是自于开发了 这个IDE的公司本身,所以我们Android开发者是一等公民。

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

打印日志

Java

System.out.print("hello world");
System.out.println("hello world");

Kotlin

print("hello world")
println("hello world")

定义变量与常量常

Java

String name = "hello world";
final String name = "hello world";

Kotlin

var name = "hello world"
val name = "hello world"

null声明

Java

String otherName;
otherName = null;

Kotlin

var otherName : String?
otherName = null

空判断

Java

if (text != null) { 
   
    int length = text.length();
}

Kotlin

text?.let { 
   
    val length = text.length
}
// or simply
val length = text?.length

字符串拼接

Java

String firstName = "Android";
String lastName = "Architect";
String message = "My name is: " + firstName + " " + lastName;

Kotlin

val firstName = "Android"
val lastName = "Architect"
val message = "My name is: $firstName $lastName"

换行

Java

String text = "First Line\n" +
              "Second Line\n" +
              "Third Line";

Kotlin

val text = """ |First Line |Second Line |Third Line """.trimMargin()

三元表达式

Java

String text = x > 5 ? "x > 5" : "x <= 5";

Kotlin

val text = if (x > 5)
              "x > 5"
           else "x <= 5"

操作符

java

final 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;

Kotlin

val 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

Car car = (Car) object;

Kotlin

var car = object as Car

类型判断和转换 (隐式)

Java

if (object instanceof Car) { 
   
   Car car = (Car) object;
}

Kotlin

if (object is Car) { 
   
   var car = object // 自动识别
}

多重条件

Java

if (score >= 0 && score <= 300) { 
    }

Kotlin

if (score in 0..300) { 
    }

更灵活的case语句

Java

int 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";
}

Kotlin

var 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

for (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()) { 
    }

Kotlin

for (i in 1..10) { 
    }

for (i in 1 until 10) { 
    }

for (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) { 
    }

更方便的集合操作

Java

final List<Integer> listOfNumber = Arrays.asList(1, 2, 3, 4);

final Map<Integer, String> keyValue = new HashMap<Integer, String>();
map.put(1, "Android");
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, "Android",
                                             2, "Ali",
                                             3, "Mindorks");

Kotlin

val listOfNumber = listOf(1, 2, 3, 4)
val keyValue = mapOf(1 to "Android",
                     2 to "Ali",
                     3 to "Mindorks")

遍历

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));

Kotlin

cars.forEach { 
   
    println(it.speed)
}

cars.filter { 
    it.speed > 100 }
      .forEach { 
    println(it.speed)}

方法定义

Java

void doSomething() { 
   
   // logic here
}

void doSomething(int... numbers) { 
   
   // logic here
}

Kotlin

fun doSomething() { 
   
   // logic here
}

fun doSomething(vararg numbers: Int) { 
   
   // logic here
}

带返回值的方法
Java

int getScore() { 
   
   // logic here
   return score;
}

Kotlin

fun getScore(): Int { 
   
   // logic here
   return score
}

// as a single-expression function

fun getScore(): Int = score

无结束符号

Java

int getScore(int value) { 
   
    // logic here
    return 2 * value;
}

Kotlin

fun getScore(value: Int): Int { 
   
   // logic here
   return 2 * value
}

// as a single-expression function

fun getScore(value: Int): Int = 2 * value

constructor 构造器

Java

public class Utils { 
   

    private Utils() { 
   
      // This utility class is not publicly instantiable
    }

    public static int getScore(int value) { 
   
        return 2 * value;
    }

}

Kotlin

class Utils private constructor() { 
   

    companion object { 
   

        fun getScore(value: Int): Int { 
   
            return 2 * value
        }

    }
}

// another way

object Utils { 
   

    fun getScore(value: Int): Int { 
   
        return 2 * value
    }

}

Get Set 构造器

Java

public 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;
    }
}

Kotlin

data class Developer(val name: String, val age: Int)

转载:https://www.jianshu.com/p/17495cc11cb6
转载:https://www.imooc.com/article/305558

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156315.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • IOS版的MT4软件如何下载安装「建议收藏」

    IOS版的MT4软件如何下载安装「建议收藏」T4的版本总体来说还是比较全。包含了电脑版、安卓版/ios版,以及mac版。那么今天来重点讲解一下IOS版本的mt4如何下载。下载方式主要分以下2种:(1)在网页上获取安装包,通常mt4。yhtz。cc涵盖了多个版本的安装包,选择你需要的IOS即可下载到手机上后,然后就进入安装流程,点击下一步,下一步,总体来说,就是跟着安装提示走即可。(2)IOS属于手机版,IOS是可以在苹果应用商店下载的。下载流程就是:搜索Mt4,然后点击下载,一般会自动安装哦,就跟下载其他的客户端是一样的。下载安装好后

    2022年8月15日
    1
  • eclipse安装教程完整版

    eclipse安装教程完整版eclipse安装教程完整版安装Java教程安装eclipse教程安装Tomcat教程安装MySQL数据库教程安装Java教程到官网下载Java,这里推荐下载JavaSE8下载完成后点击安装,然后一直下一步,注意安装路径不要出现中文,不然可能会出错接下来配置环境变量,先找到Java的安装路径并复制路径右击计算机(没有计算机就右击此电脑)选择属性,点击高级系统设置,然后在高级下面选择环境变量这里有两种配置方法一种是采用绝对路径,一种是采用相对路径绝对路径:(推荐使用)选中系统变量中变量

    2022年5月13日
    48
  • 虚拟机usb设备连接不成功_ssh怎么连接虚拟机

    虚拟机usb设备连接不成功_ssh怎么连接虚拟机解决【使用shell连接虚拟机时连接等待时长过长】的问题打开sshd服务的配置文件/etc/ssh/sshd_config把UseDNSyes,改为UseDNSno重启ssh服务打开sshd服务的配置文件/etc/ssh/sshd_config以管理员身份输入下面的命令:vi/etc/ssh/sshd_config把UseDNSyes,改为UseDNSno1、按下键盘的I键,进入编辑模式2、找到UseDNSyes,把注释#去掉,把yes修改为no3、按下键盘的Esc键,并

    2022年9月22日
    0
  • 沃舍尔算法求传递闭包_离散数学传递闭包

    沃舍尔算法求传递闭包_离散数学传递闭包给定 n 个变量和 m 个不等式。其中 n 小于等于 26,变量分别用前 n 的大写英文字母表示。不等式之间具有传递性,即若 A>B 且 B>C,则 A>C。请从前往后遍历每对关系,每次遍历时判断:如果能够确定全部关系且无矛盾,则结束循环,输出确定的次序;如果发生矛盾,则结束循环,输出有矛盾;如果循环结束时没有发生上述两种情况,则输出无定解。输入格式输入包含多组测试数据。每组测试数据,第一行包含两个整数 n 和 m。接下来 m 行,每行包含一个不等式,不等式全部为小于关系

    2022年8月10日
    12
  • 使用maven整合SSM框架详细步骤

    使用maven整合SSM框架详细步骤

    2021年9月26日
    41
  • java 接口default_接口default方法作用

    java 接口default_接口default方法作用在java8以后,接口中可以添加使用default或者static修饰的方法,在这里我们只讨论default方法,default修饰方法只能在接口中使用,在接口种被default标记的方法为普通方法,可以直接写方法体。实现类会继承接口中的default方法如果接口A中有default方法:publicinterfaceA{ publicdefaultvoida(){ System…

    2022年8月30日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号