Java与C++一些区别

Author Avatar
Brian Lee 3月 10, 2018
  • 在其它设备中阅读本文章

Java与C++都使用了不少时间,但是对两者的一些细节特征都不是很清楚。在此总结一下两者的一些区别(主要从Java角度出发),便于更清楚地掌握这两门语言。

由于此文内容比较离散,会持续更新。

  1. ​在C++中,int和long等类型的大小与目标平台有关,这对编写跨平台程序带来了很大的难度。Java中,数据类型具有固定的大小,与平台无关。
  2. Java没有任何无符号的(unsigned)形式的int、long、short或byte类型。
  3. Java中的main方法必须有一个外壳类。
  4. Java的main方法没有为操作系统返回“退出代码”,C++的main函数需要return 0.
  5. ​在C++中,数值甚至指针可以代替Boolean值。值0相当于布尔值false,非0相当于布尔值true。而Java中不是这样。
  6. const是Java保留的关键字,目前并未使用。Java中使用final定义常量。C++使用const定义常量。
  7. ​在C++中,不能保证>>是完成算术移位(扩展符号位)还是逻辑移位(填充0),这意味着C++>>运算符对于负数生成的结果可能会依赖于具体的实现。Java则消除了这种不确定性。
  8. ​Java不使用逗号运算符,但可以在for语句使用逗号分隔表达式列表。
  9. ​Java String类型不可修改,C++String 类型可修改
  10. C++比较字符串可以使用==,Java只能使用equals。
  11. Java没有goto语句,但break语句可以带标签,可以利用它实现从内层循环跳出的目的。
  12. C++中,允许在嵌套的块中重定义一个变量,在内层定义的变量会覆盖在外层定义的变量。Java中不允许这样做。
  13. ​在Java应用程序的main方法中,程序名并没有存储在args数组中。
  14. ​Java中的
    double[][] a = new double[10][6];
    
    相当于C++中的
    double** a = new double*[10];
    for(i = 0; i < 10; i++){
     a[i] = new double[6]
    }
    
  15. ​可以将Java的对象变量看作是C++的对象指针,如:
    //以下两者可看做等同
    Object obj;        //Java
    Object *obj;    //C++
    
  16. C++中,通常在类的外面定义方法,若在类的内部定义方法,这个方法自动成为内联方法。Java所有的方法都必须在类的内部定义,但并不表示它们是内联方法。
  17. C++中,不能直接初始化类的实例域(变量)。Java为了程序可读性,建议初始化实例域。
  18. 在Java中,this引用等价于C++的this指针。但在C++中,一个构造器不能调用另一个构造器。
  19. ​Java有自动的垃圾回收器,不需要人工回收内存,不支持析构器。C++有显式的析构器方法,其中放置一些当对象不再使用时需要执行的清理代码。在析构器中,最常见的操作是回收分配给对象的存储空间。
  20. ​在Java中,所有的继承都是公有继承,而没有C++中的私有继承和保护继承。
  21. 在Java中使用关键字super调用超类的方法,而在C++中则采用超类名甲::操作符的形式。
  22. ​Java没有多继承,采用接口实现。
  23. 类型转换失败时,Java不会生成一个null对象,而是会抛出一个异常。
  24. Java通过abstract关键字表示抽象类。C++没有提供用于表示抽象类的特殊关键字,只要有一个纯虚函数,这个类就是抽象类。纯虚函数为:
    class Person{
       public:
           virtual string getName() = 0;
           //other code
    }
    
  25. ​Java中所有类的根类为Object,C++中没有所有类的根类。

本博客采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!
本文链接:http://brianleelxt.top/2018/03/10/deference/