每天一个知识点:寻找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)

相关推荐
爱上妖精的尾巴1 天前
6-4 WPS JS宏 不重复随机取值应用
开发语言·前端·javascript
Goldn.1 天前
Java核心技术栈全景解析:从Web开发到AI融合
java· spring boot· 微服务· ai· jvm· maven· hibernate
李慕婉学姐1 天前
【开题答辩过程】以《基于Android的出租车运行监测系统设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·后端·vue
三七吃山漆1 天前
攻防世界——wife_wife
前端·javascript·web安全·网络安全·ctf
m0_740043731 天前
SpringBoot05-配置文件-热加载/日志框架slf4j/接口文档工具Swagger/Knife4j
java·spring boot·后端·log4j
编织幻境的妖1 天前
SQL查询连续登录用户方法详解
java·数据库·sql
用户47949283569151 天前
面试官问"try-catch影响性能吗",我用数据打脸
前端·javascript·面试
GISer_Jing1 天前
前端营销技术实战:数据+AI实战指南
前端·javascript·人工智能
未若君雅裁1 天前
JVM面试篇总结
java·jvm·面试
kk哥88991 天前
C++ 对象 核心介绍
java·jvm·c++