OnJava00--Java与C++的区别

OnJava00--Java与C++的区别

1、前言

《On Java》书中很多地方作者都琐碎地比较了Java与C++的差异点,特此单独用一篇笔记记录。

2、Java与C++的区别

(1)是否有基类:
  • Java的所有类都继承自Object -- 单根层次结构,有利于实现垃圾收集器
  • C++无法确保所有对象都属于一个基类
(2)垃圾回收:
  • C++必须在编码时就明确何时销毁对象,否则会造成内存泄漏
  • Java底层支持垃圾收集器,会自动找到无用的对象并将其销毁
(3)传值和传引用
  • C++支持传值,也支持传引用
  • Java中只有传值,对于对象的引用,参数传递的是引用的一份复制,所以方法中修改引用所指向的对象,在方法结束后并不生效
(4)寄存器
  • C/C++允许向编译器申请分配寄存器,而Java不能直接控制寄存器的分配。
(5)基本类型的默认值
  • 对于基本类型的局部变量,如果未赋值,Java会抛出编译错误,而C++编译器通常只是告警
(6)运算符重载
  • Java:不支持(只有String可以+和+=)
  • C++:支持
(7)Java没有sizeOf
  • C/C++中,sizeof()操作符返回数据项分配的字节数,因为相同的数据类型在不同机器上可能有不同的大小。
  • Java所有的数据类型在所有机器中的大小都相同,所以不需要sizeof
(8)Java的finalize()与C++的析构函数
  • C++的析构函数,在对象被销毁时总是会被调用
  • 而Java中,对象并不总是被垃圾收集。
(9)数组越界
  • C/C++:越界时会默默接受,并允许你访问所有内存
  • Java:抛出运行时异常