java和c++的主要区别、各自的优缺点分析、java跨平台的原理的深度解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: java和c++的主要区别、各自的优缺点分析、java跨平台的原理的深度解析

C++是编译型语言

首选把源代码编译生成机器语言,然后由机器运行机器码

优点是执行速度快、效率高;缺点是依赖依赖编译器,跨平台性差。

java是解释型语言

源代码不像c++那样直接翻译成机器语言,它是先翻译成中间代码(.class字节码),再由解释器(jvm)进行解释运行。优点是跨平台性好,缺点是执行速度相对慢、效率低

注意

网上还有java是,半编译、半解释型语言的说法,我对这个说法的理解是:半编译指java编译器(javac)把源代码没有一步到位编译成机器语言,而是编译成中间代码字节码,半解释指Java解释器(jvm)继续把字节码解释成机器语言运行。

java跨平台的原理

为什么同样的Java代码在不同的平台(windows、linux、mac)甚至不需要任何改动就能运行?原因是同样的Java代码编译成的字节码都是一样的,那么你把相同的字节码拿到不同平台,比如windows,那么就由windows版的jvm解释,同理在linux、mac平台,也都有对应平台的jvm来解释运行,也就是说功劳最大的就是jvm,在这里起到一个类似转换器的作用。

java与c++的区别细谈

1.C++是平台相关的,java是平台无关的。原因前面讲解过

2.c++对所有的数字类型有标准范围限制,但是字节长度是跟具体实现相关的,相同类型,在不同操作系统长度可能不一样;java在所有平台上对所有的基本类型都有标准的范围限制和字节长度。

3.c++在大多数情况跟c语言兼容,java没有对任何之前的语言向前兼容。但是语法上受到c++的影响很大(因为Java的设计者Gosling、Joy和Steele曾经在C++项目上工作过,他们受到了C++的一些特性和语法的启发)。

4.c++允许直接调用本地的系统库;Java要通过JNI(JNI是Java提供的一种机制,允许Java代码与本地的C、C++代码进行交互。)或JNA(JNA是另一种Java库,它提供了简化的方式来调用本地系统库,而无需编写繁琐的JNI代码。JNA使用Java的反射机制,允许Java程序直接调用本地库中的函数和数据结构。)调用

5.c++同时允许面向过程、面向对象程序设计;java必须使用面向对象的程序设计方式。

6.c++支持指针(在C++中,指针是一种变量,它存储了一个内存地址。通过指针,我们可以直接访问或修改该地址处的数据。),引用(引用可以看作是指向变量的别名,对引用的操作实际上是对原变量的操作。),传值(传值调用会将实参的值复制一份给形参,函数内部对形参的修改不会影响到原变量)调用;java只有值传递(对于基本类型(如int、float、boolean等)的参数传递,Java会将实参的值复制一份给形参,函数内部对形参的修改不会影响到原变量。这是因为基本类型的值是存储在栈内存中的,每个变量都有自己独立的存储空间;而对于引用类型(如对象、数组等)的参数传递,实际上是将引用的值(即对象的地址)复制一份给形参,形参和实参都指向同一个对象。因此,在函数内部修改形参对象的属性或调用其方法会影响到原对象,因为它们指向同一个内存地址)上图:

7.c++需要显式的的内存管理,但是有第三方框架提供垃圾搜集的支持,支持析构函数(C++中,析构函数是一个特殊的成员函数,它在对象被销毁时自动调用。析构函数的主要作用是在对象销毁之前进行清理工作,比如释放动态分配的内存、关闭文件等。);java是自动垃圾收集的,没有析构函数的概念。

8.c++支持多继承,包括虚拟继承;Java只允许单继承,需要多继承的场景要使用接口。

目录
相关文章
|
15天前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
35 3
|
2天前
|
自然语言处理 编译器 Linux
|
3天前
|
算法 Java 数据库连接
Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性
本文详细介绍了Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性。连接池通过复用数据库连接,显著提升了应用的性能和稳定性。文章还展示了使用HikariCP连接池的示例代码,帮助读者更好地理解和应用这一技术。
13 1
|
7天前
|
自然语言处理 编译器 Linux
告别头文件,编译效率提升 42%!C++ Modules 实战解析 | 干货推荐
本文中,阿里云智能集团开发工程师李泽政以 Alinux 为操作环境,讲解模块相比传统头文件有哪些优势,并通过若干个例子,学习如何组织一个 C++ 模块工程并使用模块封装第三方库或是改造现有的项目。
|
8天前
|
数据采集 存储 编解码
一份简明的 Base64 原理解析
Base64 编码器的原理,其实很简单,花一点点时间学会它,你就又消除了一个知识盲点。
36 3
|
10天前
|
存储 安全 编译器
在 C++中,引用和指针的区别
在C++中,引用和指针都是用于间接访问对象的工具,但它们有显著区别。引用是对象的别名,必须在定义时初始化且不可重新绑定;指针是一个变量,可以指向不同对象,也可为空。引用更安全,指针更灵活。
|
9天前
|
Java 开发者
Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点
【10月更文挑战第20天】Java多线程初学者指南:介绍通过继承Thread类与实现Runnable接口两种方式创建线程的方法及其优缺点,重点解析为何实现Runnable接口更具灵活性、资源共享及易于管理的优势。
20 1
|
5天前
|
供应链 安全 分布式数据库
探索区块链技术:从原理到应用的全面解析
【10月更文挑战第22天】 本文旨在深入浅出地探讨区块链技术,一种近年来引起广泛关注的分布式账本技术。我们将从区块链的基本概念入手,逐步深入到其工作原理、关键技术特点以及在金融、供应链管理等多个领域的实际应用案例。通过这篇文章,读者不仅能够理解区块链技术的核心价值和潜力,还能获得关于如何评估和选择适合自己需求的区块链解决方案的实用建议。
20 0
|
17天前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
20 4
|
17天前
|
编译器 C语言 C++
【C++打怪之路Lv4】-- 类和对象(中)
【C++打怪之路Lv4】-- 类和对象(中)
18 4

推荐镜像

更多