总结!Java和C++到底有什么不同!

作者:周守俭 / 时间:3年前 (2017/04/30) / 分类:科技 / 阅读:708 / 评论:0

有关Java和C++的争论由来已久,它们不同可以追溯到它们各自的传统,它们有着不同的设计目标。今天小华就和大家来聊聊这个话题。

有一篇文章把各种编程语言比做女人,那么Java和C++会是完全不同的女人,大家先来感受一下:

“Java是一个事业成功的女人。很多在她手下干过的人都感觉她的能力跟她的地位并不般配,她更多的是通过技巧打动了中层管理人员。你也许会认为她是很有智慧的人,你愿意跟随她。但你要准备好在数年里不断的听到“你用错了接口,你遗漏了一个分号”这样的责备。C++是Java的表姐。她在很多地方跟Java类似,不同的是她成长于一个天真的年代,不认为需要使用“保护措施”。当然,“保护措施”是指自动内存管理。你以为我指的是什么?”

你以为是什么?

总结!Java和C++到底有什么不同!

Java和C++都能够实现面向对象思想(封装,继乘,多态)。而由于C++为了照顾大量的C语言使用者, 而兼容了 C,使得自身仅仅成为了带类的C语言,多多少少影响了其面向对象的彻底性!JAVA则是完全的面向对象语言,它句法更清晰,规模更小,更易学。它是在对多种程序设计语言进行了深入细致研究的基础上,据弃了其他语言的不足之处,从根本上解决了C++的固有缺陷。

首先来看一下它们各自的优势。

从内存使用率来看,C++相对要更具优势。当CPU性能增加时访问RAM就会变得相对缓慢,因此内存使用率在实际运用中非常重要。ava则显得相对弱一点:a.每个对象至少占用8个字节;b.无法使用堆栈分配对象;C.常用库存迫使形成一个对象。此外,Java对象数组能真正引用数组,因此不能连续分配,这会迫使性能缓存损坏。

从垃圾回收看,C++有着明确、清晰的内存管理,可以严格控制分配内存和释放内存的过程。所有大量的块可以在分配前进行合并,而long-lived memory在此过程中只需要付出最小的代价。但是这是Java常见的一种诟病。

从语言规范看,Java语言规范在Java程序执行顺序上更为具体,例如,表达式总是以从左到右的方式执行。而在C++中实现的方式则更加灵活,导致项目很难调试,但却给编译器带来更多的自由空间。

从执行模式看,用JIT(Just-In-Time)虚拟机编译器(Java)与静态的编译模式(C++)相比的确有优势。特别是虚拟机可以根据程序当前的工作负荷进行优化。与其相反,静态编译模式则预测未来工作负荷的时间以便进行集中优化。如此一来,就会导致一些问题出现,如果普遍使用某些性能优化(inlining内部的)就会产生一些负面影响。

再看他们具体的不同点:

1、指针

Java 没有指针的概念,从而有效地防止了在 C/C++语言中,容易出现的指针操作失误(如指针悬空所造成的系统崩溃)。在 C/C++中,指针操作内存时,经常会出现错误。但是,也是不是说Java完全没有指针哦,虚拟机内部还是使用了指针,知识外人不得使用而已。这有利于Java程序的安全。

2、多重继承

C++的一大特征是它支持多重继承,允许多父类派生一个类。虽然这样的功能很强,但是使用复杂,而且会引起很多麻烦。Java则相反,它不支持多重继承,但允许一个类继承多个接口,实现了C++的功能的同时又避免了多重继承实现方式带来的不便。

3、自动内存管理

Java 程序中所有的对象都是用 new 操作符建立在堆栈上的,这个操作符类似于 C++的“new”操作符。Java 自动进行无用内存回收操作,不需要程序员进行删除。当 Java 中一个对象不再被用到时,无须使用内存回收器,只需要给它加上标签以示删除。无用内存的回收器在后台运行,利用空闲时间工作。而 C++中必须由程序释放内存资源,增加了程序设计者的负担。

4、数据类型

Java是完全面向对象的语言,所有函数和变量部必须是类的一部分。。除了基本数据类型之外,其余的都作为类对象,包括数组。而c++允许将函数和变量定义为全局的。此外,Java中取消了c/c++中的结构和联合,消除了不必要的麻烦。

5、操作符重载

操作符重载被认为是c十十的突出特征,但Java不支持操作符重载,是为了保持Java语言尽可能简单。

6、预处理功能

Java不支持预处理功能,c/c十十在编译过程中都有一个预编泽阶段,即众所周知的预处理器。预处理器为开发人员提供了方便,但增加了编译的复杂性。

7、字符串

C 和 C++不支持字符串变量,在 C 和 C++程序中使用“Null”终止符代表字符串的结束,在 Java 中字符串是用类对象(String 和 StringBuffer)来实现的,在整个系统中建立字符串和访问字符串元素的方法是一致的。Java 字符串类是作为 Java 语言的一部分定义的,而不是作为外加的延伸部分。此外,Java 还可以对字符串用“+”进行连接操作。

8、goto语句

它是C++的合法部分,引用它会造成程序结构的混乱,不易理解。Java不提供goto语句,虽然指定goto作为关键字,但不支持它的实用,这使程序更简单易读。

9、类型转换

在c和c十十中有时出现数据类型的隐含转换,这就涉及了自动强制类型转换问题。例如,在c十十中可将一浮点值赋予整型变量,并去掉其尾数。Java不支持c十十中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。

10、异常

Java中的异常机智用于捕获例外时间,增强系统容错能力,但是C++没有如此方便的机制。

这样看来,Java真的像是个事业成功的女人,你爱上她了吗?


没有评论,留下你的印记,证明你来过。


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。