Java与C++的浅层次区别

来源:互联网 发布:数据类型 js 编辑:程序博客网 时间:2024/04/30 08:10

本文总结自Core Java Fundamentals一书,不断更新。这里只涉及表象,暂不探讨两种语言更深层次上的区别以及运行机制方面的差异。

 

1- Java的class和C++的Class基本类似,但是Java里任意一个方法都必须包含在类中,这里包括main函数,C++可不是这样。除此之外,Java的main方法不返回exit code给操作系统。

 

2- C++内建数据类型实际的存储长度由具体平台决定,标准只对各种类型的最大最小长度给出规范。Java的8种primitive type,即4种整形int、short、long、byte,2种浮点型float、double,字符型char和布尔型boolean,它们的长度都是确定的,与具体平台无关,而且没有unsigned类型。

 

3- Java不允许整形到布尔型的转换,C++允许这样的隐式转换。

 

4- C++具有extern关键字,因此声明和定义在C++中是需要严格区分的。Java中声明与定义不可分离。

 

5- Java和C++都具有const关键字,但含义不同。const在C++中是常量修饰符,这一概念在Java中用final表示。目前const在Java中只作为保留字,没有任何实际用途。

 

6- C++中右移位操作符>>具体表示算术移位(符号位扩展)还是逻辑移位(最高位补0)由平台决定,因此实际上C++中右移位只保证对正整数有确定的行为。这种二义性在Java中被消除,>>表示算术移位,>>>表逻辑移位。

 

7- Java没有C++中的逗号操作符。

 

8- Java和C++一样都对字符串类型进行了封装,屏蔽了C语言中的底层操作。但是,Java中的Stirng类是不可改变的,而在C++中我们可以对string类中的某个字符进行写操作。另外一个重要的区别是,==可以在C++中测试两个字符串是否相等,这是因为标准C++库中string类对==操作符进行了重载。而Java里==作用于字符串表示测试两个String的存储位置是否一样,这里JVM为了提升效率引入了字符串常量共享的概念,因此如果目的是比较字符串是否相等,因该用String类的方法equals。

 

9- Java和C++的流控制语句语法几乎一样,但是Java中没有goto语句,用加标签的break代替。此外,Java SE 5.0引入了类似C#中foreach语句的加强版for循环。

 

10- C++中允许不同层次嵌套块中的变量同名,即内层变量名隐藏外层同名变量,Java认为这是很多程序错误的根源,因此完全杜绝这种机制,对上述做法给出一个编译错误。

 

11- Java里没有C++中操作符重载的机制,尽管Java库的作者确实对String类的+操作符进行了重载,但是他们没有对其它类这样做。

 

12- Java里的数组和C++中分配在堆上的动态数组类似,因而与储存在栈上的静态数组有显著差别。 再者,Java中没有指针算术。

 

13- Java中main函数的命令行参数arg数组不存储程序本身的名字,因而对于foo -g这样的命令arg[0]是-g,而C++中arg[0]是foo。

 

14- Java里所有的对象都在堆上创建,而且总是与new操作符相联系。

 

15- C++一般在类定义体外部给出函数定义,在类内部定义的函数自动成为内联函数。Java中所有的函数定义都在类内部,不会成为内联函数,但是JVM会对函数体短小且频繁调用的函数进行类似C++内联函数的优化。

 

 

原创粉丝点击