最近刚刚开始看严蔚敏老师的数据结构,是C语言版本的。经常看到指针,本人菜鸟一枚,突然发现平时在使用Java的时候,没有考虑过多指针的问题,遂学习了下,这才发现尽管在Java中没有显示的使用指针并且也不允许程序员使用指针,而实际上对象的访问就是使用指针来实现的,称之为引用。
一、引用类型和基本类型简介
基本类型共有八种,它们分别都有相对应的包装类。基本类型可以分为三类,字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。数值类型又可以分为整数类型byte、short、int、long和浮点数类型float、double。
引用类型(reference type)指向一个对象,不是原始值,指向对象的变量是引用变量。
java里面除去基本数据类型的其它类型都是引用数据类型,自己定义的class类都是引用类型,可以像基本类型一样使用。
示例如下:
public class MyDate {
private int day = 8;
private int month = 8;
private int year = 2008;
private MyDate(int day, int month, int year){...}
public void print(){...}
}
public class TestMyDate {
public static void main(String args[]) {
//这个today变量就是一个引用类型的变量
MyDate today = new MyDate(23, 7, 2008);
}
}
二、基本类型和引用类型的区别
其实区别很多,具体参照:
http://blog.sina.com.cn/s/blog_4586764e0100dr4r.html
http://blog.csdn.net/lu7kang/article/details/5047725
有两点应当注意:
1、Java 中的所有对象都要通过对象引用访问。对象引用是指向对象存储所在堆中的某个区域的指针。当声明一个原始类型时,就为类型本身声明了存储。
2、引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。
三、Java与C语言对指针的处理
Java是有指针的!事实上,Java中每个对象(除基本数据类型以外)的标识符都属于指针的一种。但它们的使用受到了严格的限制和防范。在C语言中,会有++p这样的操作,但是在Java中是不允许的,Java只能操作引用,不能直接操作指针。因为C语言能直接对内存进行操作,所以在开发底层时,C的效率和性能要强于Java。但是直接操作指针会带来安全隐患。Java虽然牺牲了点性能,但是增加了安全性。同时,Java避免了繁琐易错的指针操作,也简化了编程难度,增加了代码的可读性。