当前位置: 首页 > Java教程 > 正文

浅谈Java与指针

收藏文章Loading
收藏
(54)

尽管在java中没有显式的使用指针并且也不支持程序员使用指针,而实际上java对象的访问就是使用指针来实现的。一个对象会从实际的存储空间的某个位置开始占据一定适量的存储体。该对象的指针就是一个保存了对象的存储地址的变量,并且这个地址就是对象在存储空间中的起始地址。在许多高级语言中指针是一种数据类型,而在java中是使用对象的引用来代替的。实质上每一个new语句返回的都是一个指针的引用,只不过在大多时候Java中不用关心如何操作这个“指针”!

假设People类已经定义,请大家考虑一下面这段代码:

People p1 = new People("Csyor");
People p2 = p1;
p2.setName("abc");
System.out.println(p1.getName());

这段代码中People类的对象引用p2的name的成员变量进行了重新设置,但是我们会发现对象p1的name输出已经变更成为了“abc”,这是因为p1与p2均是对对象的引用,在p2 = p1之后,两个变量就指向了同一个引用的存储空间,因此,p2的修改会影响到p1,所以,输出的p1的name是“abc”。

那么,看下面的这段代码:

People p1 = new People("Csyor");
People p2 = new People("Csyor");
System.out.println(p1==p2);

这里,虽然p1和p2的成员变量name值相同,但是new了两次,所以p1和p2就指向了不同的存储空间的引用,所以,最后输出的结果会是“false”。

可见如果我们需要copy对象,简单的赋值是无法完成的,要达到这一目的可以通过实现Cloneable接口并重写clone方法来实现。如果我们需要判断两个对象的引用是否一致时就必须重写继承自Object的equale方法。

最后,指针是可以进行与整数做加减运算的,两个指针之间也可以进行大小比较运算和相减运算。但java对象引用不行,只能进行赋值运算。

本文固定链接: http://www.csyor.com/287.html - 穿梭于偶然

该日志由 Csyor 于2014年01月05日发表在 Java教程 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: 浅谈Java与指针 - 穿梭于偶然
关键字: , ,

浅谈Java与指针:等您坐沙发呢!

发表评论


快捷键:Ctrl+Enter