尽管在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对象引用不行,只能进行赋值运算。
以上内容来自于网络,如有侵权联系即删除。
猜你喜欢
发表评论
电子邮件地址不会被公开。 必填项已用*标注