Java和C++的区别有很多,主要集中在如下几个方面:
·运行机制
Java:
编写:是指在Java开发环境(Eclipse、Sublime等)中进行程序代码的输入,最终形成后缀名为.java的Java源文件。
编译:是指使用Java编译器(javac)对源文件进行错误排查、编译生成后缀名为.class的字节码文件。这种字节码是平台无关的,不能直接执行,只能够用Java解释器来解释执行。
运行:是指使用Java解释器(JVM)将字节码文件翻译成特定平台的机器代码,执行并获得结果。
Java程序运行机制如图1所示,通常情况下,使用Java解释器运行字节码文件的详细过程如图2所示,真正将字节码翻译成机器码的是JIT(即时编译器,JustIn Time)。所以说,Java既是一种解释型语言,又是一种编译型语言,但这里的编译同通常所说的将源程序编译成可执行的二进制代码不一样。
图1
图2
C++:
编写:在C/C++开发环境中进行程序代码的输入,生成.h、.cpp源文件。
编译:编译过程主要分为4个过程。
(1)编译预处理:预编译程序完成的工作,可以说成是对源程序的“替换”工作。经过这个过程,生成一个没有宏定义、没有条件编译指令、没有特殊符号的输出文件(.i)。
(2)编译、优化阶段:通过词法分析、语法分析,在确认所有的指令都符合语法规则之后,将其翻译成等价的中间代码或汇编代码(.s)。
(3)汇编过程:把汇编语言代码翻译成目标机器指令的过程。对于被翻译系统处理的每一个C语言源程序,都将最终经过这一处理而得到相应的目标文件。目标文件中所存放的也就是与源程序等效的目标的机器语言代码(.o)。
(4)链接程序 :将有关的目标文件彼此相连接,也即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够诶操作系统装入执行的统一整体(.exe)。
运行:直接在操作系统上执行二进制代码,获得结果。
C++是一种编译型语言。
·跨平台
Java:跨平台(基于JVM),一次编写(编译),到处运行。
C++:不跨平台,需要针对特定平台修改部分代码,然后重新编译。
·其他显著区别:
指针:Java没有指针(这里指编程者无法通过指针来直接访问内存,虚拟机内部还是使用了指针);C++有。
内存分配:Java对内存的分配是动态的,用new关键字分配存储空间,内存回收由垃圾回收机制进行管理,程序员不必关注;C使用malloc和free分别分配和释放内存,C++使用new和delete释放内存,程序员需要主动释放内存。
多重继承:Java不支持多重继承;C++支持多重继承。
数据类型及类:Java除了基本数据类型之外,其余都是类的对象。Java函数和变量都是类的一部分,不允许定义类外的全局变量和函数。Java取消了C++中的结构体。C++允许将变量和函数定义为全局的。
操作符重载:Java不支持操作符重载;C++支持操作符重载。
字符串:Java支持字符串变量,String和StringBuffer来实现;C+不支持字符串变量。
类型转换:Java不支持隐式类型转换,必须使用强制类型转换;C++支持。
参考资料:
Java和C++区别:http://blog.chinaunix.net/uid-12707183-id-2918815.html
C++语言与Java语言的区别有哪些:http://www.zhihu.com/question/22928284