每天一个知识点:寻找JavaScript和Java的区别

前言

昨天在刷LeetCode时,在对之前的一道简单题(13.罗马数字转整数)进行二刷时,由于之前在学校学的是Java,所以之前已经用Java做过一遍了,而最近在学JS,我就尝试着用JS去做,也很快的做出来了。但当我发现同样的代码JS花费的时间为116ms,而Java仅仅花费2ms,这使得我对这两门语言产生了浓厚的兴趣,我尝试着去网上查找资料,最终写下这篇文章。

JavaScript(耗时116ms):

Java(耗时2ms):

为什么会有如此大的差别呢?

之所以会有如此大的差别,主要是由于这两门语言在设计和执行环境上的差异导致的,主要分为以下因素:

编译与解释

  • Java:编译型语言,Java代码首先会被编译成字节码,然后在Java虚拟机(JVM)上运行。Java的这种编译方式可以进行很多优化,从而提高代码的执行速度。

  • JavaScript:解释性语言,代码在运行时,会由浏览器的JavaScript解释器逐行进行解释,然后再交给V8引擎去执行。然而,正是因为这种解释性质,会使得JavaScript的执行速度通常较慢。

这就相当于在JavaScript执行代码时存在一个中间商,将解释器类比为中间商,最终到客户手里商品的价格自然就会更高。所以JavaScript耗时会比Java长。

执行环境不同

  • Java:执行环境为Java虚拟机(JVM),它是一种高度优化的运行时环境,专门设计用于执行Java字节码。由于JVM具有即时编译器(Just-In-Time Compiler),它可以将字节码编译成的字节码转换为本机机器代码,这将大大提高代码的执行速度。

  • JavaScript:执行环境为浏览器或者Node.js等运行时环境。而这些环境都缺少了像Java的执行环境JVM那种强大的编译和优化工具,因此执行代码时性能较差,执行速度慢。

JVM就相当于游戏加速器,而JS没有,这使得Java的执行性能要远高于JavaScript.

既然Java比JavaScript快,为什么JavaScript没被淘汰呢?

你别看两门语言名字差不多,但是他们相同之处却非常少,运用的领域也各不相同。Java和JavaScript这两种语言没有直接关系,尽管它们的名称相似。其中Java是由Sun公司(现在是Oracle Corporation)开发的,而JavaScript最初由Netscape Communications Corporation开发,后来被标准化为ECMAScript。

用途不同

  • Java:通常用于开发大型、高性能的应用程序,包括企业级应用、桌面应用、游戏等,我们熟知的编译软件IDEA、Eclipse、netbean都是Java做的。游戏方面,曾爆火的游戏《我的世界》就是用Java开发的。Android的核心系统也是采用Java语言编写的,尤其采用Java的核心库,如Apache Harmony来实现JVM。因此,它在执行速度和性能方面进行了很多优化。

  • JavaScript:主要用于前端网页的开发,市面上现今大部分网站,以及微信小程序都是在JS结合其他后端语言,比如Node.js等语言进行开发的,其主要实现的目的是与用户交互,因此它的执行速度通常不是关键问题。

语言类型不同

  • Java:静态类型语言,类型检查在编译时进行,这有助于检测和预防很多错误,但也增加了编程的复杂性。
  • JavaScript:动态类型语言,类型检查发生在运行时,这使得代码更加灵活,但也可能导致在运行时出现类型相关的错误。

其他不同之处

对象模型不同

  • Java:一种严格面向对象的编程语言,所有代码都必须包含在类中,支持继承、封装、多态等面向对象编程概念。
  • JavaScript:虽然也可以支持面向对象编程,但其对象模型不同于Java。JavaScript的对象是动态的,可以随时添加或删除属性和方法。

类型系统不同

  • Java:一种强类型语言,需要在编写代码时明确定义变量的类型,同时在编译时进行类型检查。
  • JavaScript:是一种弱类型语言,变量的类型可以在运行时动态更改,不需要明确指定类型。

总结

Java的执行速度确实高于JavaScript,但Java和JavaScript也是两种完全不同的编程语言,它们在用途上以及语法上存在很多不同之处,开发者需要根据具体项目需求来选择使用哪种语言。尽管它们有相似的名称,但它们没有直接关联。

作者留言

如果以上内容对你有些许帮助,还请劳烦给博主送一个小心心♥(ˆ◡ˆԅ)

本人Gitee仓库链接(也要♥(ˆ◡ˆԅ)):codeSpace: 记录coding中的点点滴滴 (gitee.com)

相关推荐
Winston Wood2 分钟前
Java线程池详解
java·线程池·多线程·性能
花海少爷6 分钟前
第十章 JavaScript的应用课后习题
开发语言·javascript·ecmascript
手握风云-7 分钟前
数据结构(Java版)第二期:包装类和泛型
java·开发语言·数据结构
喵叔哟26 分钟前
重构代码中引入外部方法和引入本地扩展的区别
java·开发语言·重构
尘浮生32 分钟前
Java项目实战II基于微信小程序的电影院买票选座系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
sinat_3842410932 分钟前
在有网络连接的机器上打包 electron 及其依赖项,在没有网络连接的机器上安装这些离线包
javascript·arcgis·electron
不是二师兄的八戒1 小时前
本地 PHP 和 Java 开发环境 Docker 化与配置开机自启
java·docker·php
小牛itbull1 小时前
ReactPress vs VuePress vs WordPress
开发语言·javascript·reactpress
请叫我欧皇i1 小时前
html本地离线引入vant和vue2(详细步骤)
开发语言·前端·javascript
533_1 小时前
[vue] 深拷贝 lodash cloneDeep
前端·javascript·vue.js