Java与指针
来源:互联网 发布:网络推广具体做什么 编辑:程序博客网 时间:2024/05/08 02:06
Java中并没有显示的使用指针,而且也不允许编程的过程中使用指针,但实际上,一个对象的访问就是通过指针来实现的,一个对象会从实际的存储空间的某个位置开始占据一定的存储体。该对象的指针就是一个保存了对象的存储地址的变量,并且这个存储地址就是对象在存储空间中的起始地址。在许多高级语言中指针是一种数据类型,在Java中是使用对象的引用来替代的。
创建一个People类,有name(String),id(String)两种属性;
People p = null;People q = new People("Jack","0004");
这里创建了两个对于对象引用的变量p和q。变量p初始化为null
,null
是一个空指针,它不指向任何地方,也就是说它不指向任何类的对象,因此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方法来实现。
- java中与指针
- JAVA与指针
- Java--引用与指针
- JAVA与指针
- Java与指针
- JAVA与C++指针问题
- java 中的指针与引用
- java引用与C指针的异同
- 个人关于java与指针的理解
- 【Java数据结构基础】对象与指针关系
- C语言中指针与java
- 指针与指针的指针
- 指针:指针与引用
- 指针:指针与数组
- 指针:const与指针
- 指针与指针变量
- 指针与指针类型
- 指针与指针数组
- 单位,坐标与导出
- [转]常用数据库
- boj 1291 无线新时代 bfs求两点间最短路
- Python基础之数据类型
- 自适应滤波:LMS/NLMS
- Java与指针
- C#特性(Attribute)
- python2连接数据库进行简单的增删改查
- java基础 2 变量
- 点击切换图片js
- LeetCode--Sort Colors(颜色排序)Python
- VINS理论与代码详解4——初始化
- spring boot 发布
- spring cloud 学习基础教程