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++内联函数的优化。
- Java与C++的浅层次区别
- java与C的区别
- C与java的区别
- C与Java的区别
- java容器类的层次及区别
- java容器类的层次及区别
- 初学java java与C的区别
- C++与C的区别, C++ 与Java区别
- java与C区别
- Java与C及C++的区别
- Java与C/C++的区别
- java与c中数组的区别
- java与c,c++的区别
- Java与C/C++的区别
- C#与C++、JAVA的区别
- [zt] Java与C/C++的区别
- JAVA 中printf与c的区别
- JAVA与C/C++的区别
- 设计模式--【委托模式】
- 数据访问组件SqlHelper
- 用C实现串匹配的几种方法,kmp和BM
- 东方之珠
- DOS网络命令大全
- Java与C++的浅层次区别
- avr的应用程序启动我都做了啥(head.S)
- Junit 概述
- DynamicResource与StaticResource的区别
- dojo.string模块详述
- [C++]BCD碼轉換問題
- java 查看JDK中底层源码
- UML中几种类间关系总结
- 在使用JavaBean时遇到的问题:The value for the useBean class attribute is invalid