C、C++、Java语言异同总结(持续更新中)

时间:2022-09-09 20:09:45

今天突然想起大学毕业时,参加面试被问到一个问题,就是问C++和Java的不同点,当时就想到了几个,这件事一直耿耿于怀,今天准备开始总结一下,这会是一个长期更新的博客,也算是督促自己不断学习不断总结吧。


1、基本数据长度:

char在c、c++中是1个字节,java中占2个。

long int:在C、C++中占字节数和CPU有关,32位CPU占4个字节,64位占8个字节;java中占8个。

布尔型:C语言中没有,实际项目开发中会用short来自己定义;C++中bool;java中boolean,占一个字节。


2、C、C++中都有指针,通过指针可以直接访问内存,速度很快,同时也留下了危险,一不小心就可能访问空指针、野指针(用户态访问出错会导致进程重启,内核态出错比较严重设备可能直接重启了);java中没有指针,但是有引用的概念。

据说,Java虚拟机中还是使用了指针。


3、内存管理:

C语言可以直接定义一个数组,在初始化时就给分配好了内存;用户态通过malloc()和free()来动态申请释放内存,内核态使用kmalloc()和kfree(),linux还有其他的函数,不再深究。

C++引进了对象的概念,除了C语言的方法,还有new和delete,这两个是对对象的创建和删除准备的。new[]和delete[]也是成对出现的。

java中就方便多了,只有new,我们对待类对象和数组一视同仁,都是new出来的,new出来的是从堆内存中分配的,当对象没有被引用之后,由java虚拟机的垃圾回收机制判断是否需要回收内存,不再需要人为干预,但是一些情况下也是可以手动调用系统函数强制进行垃圾回收的。


4、继承

C++中支持多继承的。

Java中支持单继承extend,但是又添加了接口实现implements,一个类可以实现多个接口,然后重写虚函数。


5、操作权限

首先要明白进程空间内数据共享,全局变量在进程中即使不同的线程也是可以访问的。

这里要说的是,java中相较C++多了缺省权限,多了包的概念,protected是包内可访问的,private是类内可访问的,public是全局可访问的。