Java与指针

Java中并没有显示的使用指针,而且也不允许编程的过程中使用指针,但实际上,一个对象的访问就是通过指针来实现的,一个对象会从实际的存储空间的某个位置开始占据一定的存储体。该对象的指针就是一个保存了对象的存储地址的变量,并且这个存储地址就是对象在存储空间中的起始地址。在许多高级语言中指针是一种数据类型,在Java中是使用对象的引用来替代的。
  创建一个People类,有name(String),id(String)两种属性;

People p = null;
People q = new People("Jack","0004");

这里创建了两个对于对象引用的变量p和q。变量p初始化为nullnull是一个空指针,它不指向任何地方,也就是说它不指向任何类的对象,因此null可以复制给任何类的对象的引用。变量q是一个对于People类的实例引用,操作符new的作用实际上是为对象开辟足够的内存空间,而引用p是指向这一内存空间地址的指针。
  继续编写:

People p1 = new People("David","0001");
People p2 = p1;
p2.setName("Denny");
System.out.println(p1.getName());

运行结果为:

Denny

这段代码中对People类的对象p2的name成员变量进行了设置,值为Denny。但是这时就会发现,p1的成员变量name的值也变成了Denny。
  原因就是p1和p2都是对对象的引用,在完成赋值语句People p2 = p1;后,p2和p1指向通一个存储空间,所以对于p2的修改也影响到了p1,如图所示:
这里写图片描述
  
  继续编写:

People p1 = new People("David","0002");
People p2 = new People("David","0002");
System.out.println(p1 == p2);

在这里虽然p1与p2的所有成员变量的内容均相同,但是由于它们指向不同的存储空间,所以,输出语句输出结果为false。p1与p2的指向不同打的存储空间,如图所示:
这里写图片描述

由此可见,如果我们希望完成对象的拷贝,使用一个简单的赋值语句是无法完成的。要达到这一目的可以通过实现Cloneable接口并重写clone方法来完成。如果我们希望判断两个对象引用是否一致是可以覆盖继承自Object类的equals方法来实现。

2018年11月06日,将本文标签更改为转载,原意本文为记录用,但今天无意间发现这篇文章的阅读量和其他文章相差甚远,特在此改正。

  • 34
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值