尽管在 Java 中没有显式的使用指针并且也不允许程序员使用指针,而实际上对象的访 问就是使用指针来实现的。一个对象会从实际的存储空间的某个位置开始占据一定数量的存 储体。该对象的指针就是一个保存了对象的存储地址的变量,并且这个存储地址就是对象在 存储空间中的起始地址。在许多高级语言中指针是一种数据类型,而在 Java 中是使用对象 的引用来替代的。 为此请读者考虑如下代码的运行结果:
People p1 = new People("David","0004"); People p2 = p1; p2.setName("Denny"); System.out.println(p1.getName());这段代码中对 People 类的对象引用 p2 的 name 成员变量进行了设置,使其值为字符串 “Denny”。但是我们会发现在输出 p1 的成员变量 name 时并不是输出"David",而是"Denny"。 原因是 p1 与 p2 均是对对象的引用,在完成赋值语句" People p2 = p1; "后,p2 与 p1 指向同 一存储空间,因此对于 p2 的修改自然会影响到 s1。通过图可以清楚说明这段代码运行 的情况。 请读者继续考虑以下代码的运行结果:
People p1 = new People("David","0004"); People p2 = new People("David","0004"); System.out.println(p1= = p2);在这里虽然p1与p2的所有成员变量的内容均相同,但是由于它们指向不同的存储空间, 因此,输出语句输出的结果为 false。图说明了 p1 与 p2 的指向。