Java与C/C++的比较
一提到Java与C/C++的不同,很多人首先想到的是Java没有指针。本文就是探讨一下这个不同
Java没有指针,但只是没有显式指针,其实Java的指针无处不在。
Java的基本数据类型的引用与C/C++类似,但对象的引用与C/C++完全不同.
- 以
'public class Example{}'
为例 ` Example example ; //声明对象Example
在C/C++中会直接申请一个内存空间来存放example实例,而在Java中,example申请的内存空间只存放一个指向真正存放example的空间的内存地址。也就是说Java声明的其实是一个”指针”,我们称之为引用(我感觉引用这个词比指针容易理解多了)。
- Java声明的是引用!
- Java声明的是引用!
- Java声明的是引用!
- 这个很重要,之后几条靠这个理解就很简单。
- 以
Java引用声明后如果没初始化(new 一下),则引用指向null(无引用,不分配存储空间)。而C/C++还是会分配内存。但C/C++也可如同Java一般,需用&符显式标明。
对于
Example example1=example;
Java是将因引用(地址)example复制给example1,不是将对象实体复制到example1,而C/C++不同参考上一条,对于
example1==example
Java判断的是example1与example是否是同一引用。即是否是同一个对象(地址相同),而C/C++判断的是是否为相同的对象(内容相同)。Java想判断内容相同需要函数equals();
C/C++用指针在方法间传递参数,从而避免拷贝对象,而Java直接传递引用就可以。
Java会自动删除并释放无效引用,不用手动操作内存。具体的会在其它博客说明。