1、区别
比较的基准 | Cpp | Java |
平台依赖 | 依赖 | 不依赖 |
预处理机制 | 有 | 无 |
内存管理 | 程序员可访问可控制 | 系统控制 |
继承模式 | 允许单继承和多重继承 | 只允许具有抽象接口的单继承 |
可移植性 | 必须为平台重新编译源代码,因此代码不可移植 | 字节码(.class文件)可移植到平台特定 JVM |
2、解释
1、Java 源代码在编译时被转换为字节码。编译器编译的过程将.java文件变为.class文件,.class文件是JVM看得懂的文件。在运行时,JVM再将这种.class文件类型的字节码转换成机器可以识别的机器语言,即解释器执行这个字节码并给出输出。大多数情况下,Java 是一种解释性语言,因此与平台无关;而C++ 使用编译器来编译和运行源代码。它将源代码转换为机器语言。因此 C++ 是平台相关的。因此,这也导致Java执行的速度比Cpp慢!
2、Java没有预处理机制。若想使用另一个库里的类,只需使用import命令,并指定库名即可。不存在类似于Cpp预处理机的宏。C/C++在编译过程中都有一个预编泽阶段,即众所周知的的预处理器。综上,Java虚拟机虽然没有预处理器,但它提供的引入语句(import)与C++预处理器的功能类似。
3、Java通过垃圾收集器自动进行无用内存回收操作,不需要程序员进行删除;而Cpp中必须由程序员释放内存资源,增加了程序设计者的负担。
4、在 C++ 中,当定义一个新的类 B 时,如果发现类 B 拥有某个已写好的类 A 的全部特点,此外还有类 A 没有的特点。那么就不必从头重写类 B,而是可以把类 A 作为一个“基类”(也称“父类”),把类 B 写为基类 A 的一个“派生类”(也称“子类”)。这样,就可以说从类 A “派生”出了类 B,也可以说类 B “继承”了类 A。[单继承基本概念] C++支持多重继承,它允许多父类派生一个类。Java不支持多重继承,但允许一个类继承多个接口(extends+implement),实现了C++多重继承的功能,又避免了C++中的多重继承实现方式带来的诸多不便。
5、在Java中定义变量名只是创建了一个新的标识符,跟创建对象没有关系,创建对象必须通过 new 来完成,只有创建对象时才会申请内存空间(如果没有new那就是一个空引用);而C++ 中定义的变量名不仅仅是个标识符,还自动关联着栈中的一块内存空间。C++ 中的 new 操作符表示的是在堆中申请内存。
6、Java中原始类型和引用类型不一致。原始类型是类,引用类型是对象。使用原始类型无须调用 new,也无须创建对象。比方说 : 原始类型 int i = 3;引用类型 Integer i = new Integer(3)
而在Cpp中,类型名 & 引用名 = 某变量名 定义了一个引用。某个变量的引用,等价于这个变量,相当于该变量的一个别名。 int a = 3; int & b = a; b表示一个引用,b引用了a,是int类型。
3、参考
4、思考
C/C++是会考虑到编译器的“感受”的,而Java更多考虑的是程序员的"感受"。与C/C++相比,Java把很多编程的细节都黑箱化了。思考来自该知乎“C++与java多态的区别 ?”的高赞评论
会不定期更新~觉得不错记得三连哦,有问题也请指出,谢谢!