10 月 23 - 25 日,QCon 上海站即将召开,现在大会已开始正式报名,可以享受 8 折优惠 了解详情
写点什么

Kotlin 对战 Java:新秀会击败老将吗?

  • 2019-07-25
  • 本文字数:3732 字

    阅读完需:约 12 分钟

Kotlin对战Java:新秀会击败老将吗?

针对 Android APP 的两种编程语言 Kotlin 和 Java,本文介绍了什么是 Kotlin,用代码示例展示了 Kotlin 与 Java 的主要区别,并在多个功能方面对 Kotlin 与 Java 进行了比较。本文的观点是,如果主要目标是 android 开发,首选编程语言一定是 Kotlin。

Kotlin 会带来革命性的改变吗?

那些计划开发 android APP 的企业如今面临着许多挑战,尤其是,应该选择选用哪种技术来开发最好的 android APP。


即使有专业技术知识的人,也可能也会混淆 Kotlin 和 Java。而对于那些压根不知道这两个词的人,这里解释一下,Kotlin 和 Java 是 android APP 开发的两种编程语言。


自从 Google 引入 Kotlin 作为 android APP 开发的第二官方编程语言以来,Java 和 Kotlin 之间的战斗日益白热化了!


此外,像 Pinterest、Evernote、Uber、Trello、Postmates、Corda 等顶级科技公司已经将他们的 android APP 编程语言从 java 转换成了 Kotlin。这一现象进而引发了众多开发人员的好奇心。


您是否想知道,使用哪种编程语言做android APP开发将有助于你获得最好的 android APP 性能?不用担心!在本文的最后,你将得到想知道的答案:Kotlin 和 java,哪一种编程语言更好?


希望你读了本文后,也能得到其他的问题的答案,比如:



  • Kotlin 与 Java 相比如何?



  • Android 开发人员更喜欢使用哪种编程语言:Java 还是 Kotlin?



  • 如果同时学习 Java 和 Kotlin,这样会更好吗?



  • 为了做开发 Android,我应该先学 Kotlin 再学 Java 吗?



  • 我应该从 Java 转到 Kotlin 吗?



  • 从 Kotlin 转回 Java,这是个好主意吗?



本文的内容涵盖:



  • 什么是 Kotlin?(我假定人人都知道大名鼎鼎的 Java)



  • Kotlin 与 Java 的主要区别是什么?



  • Kotlin 与 Java 的比较。



  • Java 在哪些方面仍然保持其领先地位?


什么是 Kotlin?

简而言之,Kotlin 可以用一种更好的方式构建一个 APP,该 APP 可以在 Java 上运行,但减少了很多麻烦。Kotlin 是一种编程语言,它可以辅助开发人员在更短的时间内开发出优秀的 APP。


【延伸阅读】:你应该知道的最出名的7个用Kotlin编写的android APP。


Kotlin 是由捷克的 JetBrains 软件公司开发的一种静态类型的、面向对象的编程语言。它与 Java 语言具有互操作性,而且该语言十分简洁,并得到 Android studio 的支持。


我曾听说有人将 Kotlin 描述为“Java 之光”。这种说法最有可能的原因是,Kotlin 确实与 Java 有很多相似之处。


事实上,Kotlin 在您的设备中需要使用 java machine 来运行一个完成的 APP,这样就少了很多麻烦。这种编程语言要求在你的计算机、手机或其他智能设备上安装 Java。甚至,在同一个 APP 中,可以同时使用 Java 和 Kotlin 两种语言。

Kotlin 与 Java 的主要区别

介绍得足够多了,现在让我们继续讨论 Kotlin 与 Java 的主要区别是什么。

用 Java 创建数据类的代码示例

public class UserEntity {            private String userId;            private String name;            private String email;            private String mobileNumber;            public void setUserId(String userId) {            this.userId = userId;            }            public void setName(String name) {            this.name = name;            }            public void setEmail(String email) {            this.email = email;            }            public void setMobileNumber(String mobileNumber) {            this.mobileNumber = mobileNumber;            }            public String getUserId() {            return userId;            }            public String getName() {            return name;            }            public String getEmail() {            return email;            }            public String getMobileNumber() {            return mobileNumber;            }
复制代码

用 Java 创建相同数据类的代码示例

class UserEntity {          var userId: String? = null          var name: String? = null          var email: String? = null          var mobileNumber: String? = null
复制代码

Kotlin 哪里优于 Java?

开发人员对 Kotlin 和 Java 的看法褒贬不一。


但是,在为什么选用 Kotlin 而不是 Java 作为编程语言这一点上,他们却有一些共识:


  • 声明数据类型的代码通常又累赘又乏味,但是 Kotlin 给出了一种在代码运行时作出主动类型推断的解决方案。通过查看代码的其余部分以及使用数据的方式,Kotlin 让开发人员明白,这个函数正在使用什么数据类型。它有效地避免了开发人员在代码中不必要地声明表达式和数值的类型。

  • 我们都知道,一个人需要多年时间才能做到精通 Java 及其语法。相反地,Kotlin 却不需要这么久。Kotlin 的语法不像 Java 那么复杂。用 Kotlin 编写代码比 Java 简单。因为 Kotlin 吸取了之前存在的众多编程语言中的精髓。使用这样的编程语言,最终让阅读和理解代码也变得很简单,调试程序花费的时间也更少。

  • Kotlin 允许开发人员在不使用冗余类的情况下定义函数和静态对象。开发人员可以轻松地在代码中同一个地方完成对象和函数的定义。这会让代码更容易阅读和调试。


最后,用 Kotlin 编写的代码比 Java 更友好、更快捷、更容易。


Kotlin 与 Java 的比较

现在您已经了解了什么是 Kotlin,让我们从各个功能方面来比较 Kotlin 和 Java 的差异。

流行程度

当 Google 在 2016 年发布第一个稳定版本时,Kotlin 的市场份额在 2017 年 5 月增长到了 4.28%。到 2017 年 9 月,这一比例升至 7.54%。


而 2018 年的一项对 10 万 stack overflow 用户的调查显示,超过 7.54%的受访者使用 Kotlin 进行 android 开发。可以访问Kotlin的状态报告看看它现在的发展状况。


而 Java 语言的普及程度仍然处于巅峰转台。最新的证据是Java的TIOBE指数,这足以证明截至 2019 年 6 月,Java 仍然是全球最流行的 android 编程语言。

Android Studio 支持

说到 Java, Android 并不支持所有的 Java 功能。虽然 android 完全支持 Java 7,但 android 只支持 Java 8 所有特性中的一部分。


然而,已证实的是,Kotlin 在 android studio 中得到了更有效的支持。因此,如果想要支持编程语言的全部功能,你可以放心地选用 Kotlin。如果您计划在未来构建多个 APP,Kotlin 是一个完美的选择。

处理“Null”的能力

当您使用 Java 时,您可以将“Null”分配给任何变量。当您使用带有 null 值的对象引用时,会遇到一个麻烦,因为会得到一个“NullPointerException”异常。


在 Kotlin,这是它最大的优势之一。在 Kotlin 中,没有“数据类型”可以将 null 作为默认值。如果开发人员希望在“可设定为无效的(nullable)”变量中保留 null 值,则必须显式地去定义它。这样就从根本上消除了“NullPointerException”。

处理长时间运行的网络 I/O 或 CPU 密集型任务

Java 允许多线程在后台运行,但是它的处理机制很复杂,在单独一个线程中实现长时间运行的 I/O 或 CPU 密集型操作的功能。


而在 Kotlin 中,开发人员可以运行多个线程。它支持线程的并发协同。这些机制在一定程度上使得取消一个线程执行的时候,并不会阻塞任何其他线程。


因此,在处理长时间运行的网络 I/O 或 CPU 密集型任务方面,Kotlin 比 Java 更具有领先优势。

开发人员成本

2018 年底,Kotlin 编程是最受欢迎、最赚钱的技能之一。Kotlin 开发人员的平均年薪约为 14 万美元。


随着 Android APP 需求的增长,对精通 Kotlin 编程的开发人员的需求也在增加。因此,你应该放长眼光未雨绸缪地让自己的技能做好准备。


相比之下,Java 开发人员的雇佣成本在招聘 Kotlin 的雇佣方那里是可以承受的。因为市场上实在是有太多 Java 开发人员,你完全可以根据自己的项目需求在招聘中讨价还价。

构建更复杂的产品

如果您的目标是创建更大规模更复杂的产品,那么 Java 仍然是更好的选择,而且由于 Java 比 Kotlin 更成熟,Java 本身的特性更支持构建大规模软件。


另一方面,如果主要目标只是 android 开发,那么你的首选编程语言一定是 Kotlin,因为 Kotlin 生产效率更高,Google 对其支持更好。

性能和编译速度

JetBrains 公司声称 Kotlin 的性能比 Java 好是因为它的速度。Kotlin 支持内联函数,使用 lambda 代码时,这些内联函数让 Kotlin 比 Java 编写的代码运行得更快。


此外,Java 编译干净版本的速度比 Java 要快 10-15%。然而,在编译方面,Kotlin 和 Java 结果相近,或者 Kotlin 稍好一点。

Java 在哪些方面仍然保持其领先地位?

Kotlin 可能是新鲜事物,并且迅速地受到开发人员青睐,但是除了编程语言成熟度之外,Java 和 Kotlin 相比仍然有一些优势。而且,许多开发人员仍然更喜欢使用 Java 来进行 Android 开发。


Kotlin 中不支持下列功能:


  • 静态成员

  • 通配符类型

  • 非私有字段

  • 已检查的异常

  • 原始类型

  • 三元运算符 a?b: c

结语

选择最好的编程语言可能是一项棘手的工作。Java 和 Kotlin 都各有其优点。因此,要帮你做出正确的选择,还需要考虑这两个平台的长期发展战略。


您不能忽视这样一个事实,即 Google 自身正在逐渐远离 Java 语言。但另一方面,Java 作为许多开发人员的首选编程语言已经很长时间了。


由于结构上的相似性,这两种编程语言可以在一个项目中共存。


英文原文:https://www.excellentwebworld.com/kotlin-vs-java


2019-07-25 18:4112930
用户头像

发布了 63 篇内容, 共 43.9 次阅读, 收获喜欢 119 次。

关注

评论 3 条评论

发布
用户头像
为赋新诗强说愁!
2019-07-30 09:42
回复
用户头像
"用 Java 创建相同数据类的代码示例" 应该是“用 Kotlin 创建相同数据类的代码示例"
2019-07-29 12:14
回复
用户头像
只能说大公司心里都有自己的小算盘
2019-07-26 18:13
回复
没有更多了
发现更多内容

关于编码

西贝

Java 编码

如何基于消息中间件实现分布式事务?我想说的都在这儿了!!

冰河

分布式事务 微服务 分布式数据库 数据一致性 海量数据

架构师训练营第2期-第一周-学习总结

井中人

epoll服务器解析

菜鸟小sailor 🐕

数据安全无小事:揭秘华为云GaussDB(openGauss)全密态数据库

华为云开发者联盟

安全 数据 加密

区块链赋能供应链金融|应用优势与四类常见模式

CECBC

区块链

微服务的理想与现实

京东科技开发者

云原生

socket编程

菜鸟小sailor 🐕

websocket

Week 4命题作业

balsamspear

极客大学架构师训练营

谁说AI看不懂视频?

华为云开发者联盟

视频 剪辑

架构师训练营第 2 期第一周作业

井中人

听说你会缓存?

架构师修行之路

redis 缓存 微服务

商用密码与区块链共推数字经济发展

CECBC

网络安全 数字经济

终于,SM2国密算法被Linux内核社区接受了!

阿里云基础软件团队

设计数据库集群读写分离并非易事

架构师修行之路

分布式 微服务

二十一、深入Python强大的装饰器

刘润森

Python

Java中String占用空间的评估标准

陈德伟

Java jdk 源码剖析

Java中的String到底占用多大的内存空间?你所了解的可能都是错误的!!

冰河

Java 内存泄露 string 性能调优 内存溢出

一致性 hash

garlic

极客大学架构师训练营

食堂就餐卡系统设计

Griffenliu

mongodb源码实现、调优、最佳实践系列-Mongodb网络模块源码实现及性能调优(一)

杨亚洲(专注MongoDB及高性能中间件)

MySQL mongodb 中间件 架构师 分布式数据库mongodb

一文读懂线程池的工作原理(故事白话文)

捡田螺的小男孩

Java 面试 线程池 线程池工作原理

架构作业:一致性hash

Nick~毓

C/C++最佳实践

jiangling500

c c++ 最佳实践

在K8S Volume中使用 subPath

东风微鸣

Kubernetes 最佳实践

容器开发运维人员的Linux操作机配置优化建议

东风微鸣

Kubernetes 最佳实践 k8s入门

小熊派开发实践丨漫谈LiteOS之传感器移植

华为云开发者联盟

开发 IoT stm32

Week 4学习总结

balsamspear

极客大学架构师训练营

为什么Java容器推荐使用ExitOnOutOfMemoryError而非HeapDumpOnOutOfMemoryError?

东风微鸣

Kubernetes 最佳实践 jvm调优

大明湖畔昇腾绽放,趵突泉里智能奔涌

脑极体

如果只推荐一本 Python 书,我要 Pick 它!

Python猫

Python 学习 编程 程序员 码农

Kotlin对战Java:新秀会击败老将吗?_语言 & 开发_Anchal Malik_InfoQ精选文章