Java和C++作为最近十几年应用最广泛,影响最深远的语言,有它们相似的地方,但根本理念还是有很大差异的。C++被直接设计为C的超集,这给它带来了很多虔诚的使用者,也带来了很多历史包袱。作为既实现面向对象,泛型又效率极高的语言;在内存效率不再那么重要的情况下,C++的应用领域不可避免的越来越窄。而Java,不直接继承自C,但考虑到其创始人詹姆斯·高斯林曾经用了十几年的C语言编程,想来他在设计Java的时候是在深入根植于C而设计。Java是一门纯面向对象的语言,也是一门面向应用的语言,它强大的类库让人能很快做出一些很有意思的东西出来。下面就各方面谈下Java与C++不同的地方:
基本语法
1.总的来说,C++和Java基本语法类似,都根植于C,但Java根据自己需要做了一点修改
2.就基本数据类型,Java和C++主要都是整型、浮点型和布尔型。微小的区别是,Java多了byte;C++用bool,Java是 boolean。其次,Java的所有primitive类型都有对应的包装器容器类型,通过包装变成对象才能放入Java内置的Collections中。
还有就是,Java是类型安全的语言,整型,浮点型和布尔型之间不支持隐式类型转换。
3.复合类型方面,首先,Java没有指针。其次,Java的引用与C++的引用很不一样:C++的引用作用是别名,从实现上来讲是常量指针;而Java 引用则是用以绑定对象,更像是一个封装的指针。
4.Java用来操纵对象的引用可以先初始化再指向对象,而C++的引用必须在初始化时就指向对象。
这点把Java的引用当做指针,把C++的引用当做常量指针的话就很容易理解了。
5.Java类的基本类型成员变量可以自动初始化为默认值,类的复杂类型成员变量或者函数的基本类型成员变量如果没有初始化会报编译错误,而C++不提供这个机制。这一点个人认为很重要:这点决定了C++的构造函数规则要比Java复杂的多。数据成员得按顺序赋值,专门引进构造函数初始化列表来提高效率等。Java就方便很多,反正构造函数里没有初始化的成员可以被设为默认值。
6.C++中,除了极少数运算符,都可以重载,而Java不行。
7.Java没有sizeof操作符,因为所有数据类型在所有机器中的大小是相同,没有必要。而C++中经常使用,题库里这样的题很多。
8.Java支持foreach方式的遍历数组或容器的循环方法,而C++11才加入这个机制
9.const和final:C++用const修饰常量,Java用final,两者都可以修饰常量和不可改变的参数类型。同时final还可以修饰不可继承的类,不可覆盖的方法。
10.全局变量:Java没有全局变量,但public static变量可以充当全局变量且封装性更好,public static final类似全局常量。
11.Java的逻辑运算符有两种,短运算符&&和||,同C++一样,支持短路运算; 长运算符&和|,不支持短路运算。
这方面,得感谢Java的类型安全,在C++中,由于可以类型转换,&和|不可能同时实现逻辑运算和位运算。
面向对象:继承与多态
1.Java中所有类都继承自Object,形成一个继承体系。而C++没有这样一个终极类。Object并非抽象类,有几个方法,如equals(),toString(),hashCode(),无需覆盖 。
2.Java属于纯面对对象语言,函数只能定义在类里,而C++可以将函数定义在类外。