AICon议程上新60%,阿里国际、360智脑、科大讯飞、蔚来汽车分享大模型探索与实践 了解详情
写点什么

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:4112446
用户头像

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

关注

评论 3 条评论

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

【LeetCode】判断矩阵是否是一个 X 矩阵Java题解

Albert

LeetCode 7月月更

容易混淆的基本概念 成员变量 局部变量 全局变量

NewBoy

前端 移动端 iOS 知识体系 7月月更

Vue.js基础环境的搭建以及简单使用Element-ui

是乃德也是Ned

7月月更

谈谈对Flink框架中容错机制及状态的一致性的理解

百思不得小赵

flink 容错机制 状态 7月月更

OpenFeign

急需上岸的小谢

7月月更

ORACLE进阶(三)数据字典详解

No Silver Bullet

oracle 7月月更 数据字典

不要再说微服务可以解决一切问题了!

博文视点Broadview

如何让全彩LED显示屏更加节能环保

Dylan

LED LED显示屏

小红书自研KV存储架构如何实现万亿量级存储与跨云多活

小红书技术REDtech

存储 分布式KV 跨云多活

如何将 DevSecOps 引入企业?

SEAL安全

DevOps DevSecOps DevSecOps和敏捷

CSS动画篇之炫酷时钟之时钟墙

南城FE

CSS 前端 动画 时钟 7月月更

Qt实现json解析

小肉球

7月月更

SpringBoot Webflux解析

Ethan

蚁群算法(实例帮助理解)

秃头小苏

蚁群算法 7月月更

5G NR系统架构

柒号华仔

5G 网络 7月月更

线上故障突突突?如何紧急诊断、排查与恢复

阿里巴巴云原生

阿里云 微服务 云原生 故障恢复 诊断

SAP UI5 ObjectPageLayout 控件使用方法分享

汪子熙

前端开发 Fiori SAP UI5 ui5 7月月更

LLVM之父Chris Lattner:为什么我们要重建AI基础设施软件

OneFlow

人工智能 软件系统

LeetCode-145. 二叉树的后序遍历(java)

bug菌

Leet Code 7月月更

第五届 Polkadot Hackathon 创业大赛全程回顾,获胜项目揭秘!

One Block Community

区块链 科技

Lepton 无损压缩原理及性能分析

vivo互联网技术

对象存储 无损压缩 lepton 图片压缩

非技术部门,如何参与 DevOps?

SoFlu软件机器人

基于昇腾AI丨高新兴推出城市道路车辆二次识别解决方案,达到业界领先水平

科技热闻

基于昇腾AI丨爱笔智能推出银行网点数字化解决方案,实现从总部到网点的信息数字化全覆盖

科技热闻

Web3基金会「Grant计划」赋能开发者,盘点四大成功项目

One Block Community

区块链+

官宣!第三届云原生编程挑战赛正式启动!

阿里巴巴云原生

阿里云 Serverless 边缘计算 ACK 云原生编程挑战赛

基于STM32+华为云IOT设计的智能防盗单车锁

DS小龙哥

7月月更

Node の MongoDB Driver

空城机

mongodb Node 7月月更

微信小程序触底加载与下拉刷新的实现

猪痞恶霸

小程序 前端 7月月更

RingCentral Android启动优化实践

RingCentral铃盛

android 启动流程

基于昇腾AI丨以萨技术推出视频图像全目标结构化解决方案,达到业界领先水平

科技热闻

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