百度空间 | 百度首页 
 
查看文章
 
Java和C++的区别
2009-11-03 00:39


Java更Object Oriented,在Java中,一切都是对象,甚至控制台入口main函数都被放入了一个对象作为静态方法——看上去有点穷折腾。

Java的对象都从堆中分配,C++的自动变量都是从栈里面分配的,我想这大概是有历史原因的——在16位操作系统时,从栈里面寻址要比从堆里面快(前者只需改变一下SP的值,后者还需要将数据段地址左移4位再加偏移量)

Java的函数都是传地址的,就像C++里的引用,所以函数调用一次,参数值就会改变;而C++的参数默认是传值的,就是说把参数复制一份,原来的参数在函数调用后值不变。除非你显式地用引用来改变参数值。

Java动态申请的内存分配后不需要你操心释放,因为有GC Garbage Collection垃圾收集器,算法是只有当内存耗尽才对不再使用的对象回收内存;C++必须由程序员显式地调用delete来释放内存,这样比较灵活,但也加重了程序员的负担,容易造成内存泄漏错误。

Java程序的代码运行在虚拟机上,天然就是跨平台的;C++的代码和操作系统关系密切,移植起来比较费力,但因为是本地代码,并且在编译时可经过各种优化,效率非常高。

Java要启动一个线程需要实现一个接口Runnable,编写其中的run()方法;C++可以直接用系统API(如果是windows下的话)AfxBeginThread()就可以。线程同步可以直接借助OS提供的核心对象:事件,互斥量等。用waifForSingleObject()完成同步。

Java解决名字冲突的方式是包:Package,并且在Java中,低级抽象源文件已经很少被使用;在C++中还遗留着来自c的头文件等,后来C++也使用名字空间这种机制,类似于java的包。

Java用关键字Interface强调了接口,Java中的接口就是C++中的抽象基类——在Java中有专门的关键字Abstract来修饰不加实现的方法(C++里的纯虚函数),而C++在则是function()=0;有点土。并且从接口继承来的类,需要用implements,而C++仍不加区别的用“:”表示继承关系。

Java不再体现操纵系统的重要概念:进程;C++继续体现。\

Java的接口相当于C++的头文件,Java叫Import,你引了没有?C++叫include,你包含了没有?

Java类的每个成员都需要显式地标明属性是public、private还是protected,C++只需要在改变时标明,否则下面一列都是第一个成员的属性。

关于常量修饰符:Java的final只保护引用名和被引用对象的关系,而C++的const保护对象本身不被改变,所以final像婚约,并不能保证被引用对象的变化,而C++的const才真正的矢志不渝(当然,你要是非用指针来强制改变内存,const也帮不上忙)

总之,Java让程序员操心少了,开发效率提高了,运行效率下降了(相对C++而言),如果说C++是一杆狙击枪;那Java就是一挺机枪。


类别:软件开发 | 添加到搜藏 | 浏览() | 评论 (2)
 
最近读者:
 
网友评论:
1
2009-11-03 09:41 | 回复
完全不懂啊~
 
2
2009-11-07 20:28 | 回复
此语言非彼语言,不懂了~~
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu