java 对象=对象_java 对象、对象引用

1.简介

在Java中对象和对象引用是两个容易混淆的概念,下面通过代码示例进行详细的说明。

2.含义

为方便说明,首先定义一个Person类,它有name和age两个属性。

1 public classPerson {2

3 privateString name;4 private intage;5

6 public Person(String name, intage){7 this.name =name;8 this.age =age;9 }10 }

现在来创建一个对象:

Person p1 = new Person("Wang", 12);

我们通常把上述代码称之为创建一个对象,那么如何正确区分p1、new Person("Wang", 12)以及它们之间的关系呢?下面做进一步拆分:

1 Person p1;2 p1 = new Person("Wang", 12);

上面分开的两条语句有助于我们的理解,我们知道在Java中使用new关键字创建对象,所以说new Person("Wang", 12)是在创建对象,或

者可以说它是对象本身;那么第1条语句中的p1表示什么呢,在Java中我们称之为对象引用变量,完整的表述是”p1是一个指向Person对象

的引用(变量)“。

3.关系

在理解对象、对象引用后,我们在进一步说明它们之间的映射关系。

1 Person p2;2 p2 =p1;3 p2 = new Person("Li", 11);

具体说明如下:

第1行创建一个Person类的对象引用p2,它指向NULL。

第2行将对象引用p1所指向的对象(对象的地址)复制给p2,注意此时这两个对象的引用p1和p2都指向同一个对象”Wang“,修改任意一

个都会相应地导致另一个参数改变。

第3行将对象引用p2指向了一个新对象”Li“,此时p1和p2指向了不同的对象。

注:通过上述关系说明可知,一个对象可以拥有多个引用,一个引用只能同时绑定0个或1个对象。

4.传参

在理解对象、对象引用之间的关系后,再来看看Java中的传参问题。在函数中如果传入的是基本类型,将会得到此基本类型的一份拷贝;

如果传入的是传递引用,就得到该引用的拷贝。代码示例如下:

1 public classTest {2 private inti, j;3

4 private voidtest_m1(Test a) {5 Test b = newTest();6 b.i = 1;7 b.j = 2;8 a =b;9 }10

11 private voidtest_m2(Test a) {12 a.i = 1;13 a.j = 2;14 }15

16 public static voidmain(String[] args) {17 Test t = newTest();18 t.i = 5;19 t.j = 6;20 System.out.println("t.i = " + t.i + " t.j= " + t.j); //5,6

21

22 t.test_m1(t);23 System.out.println("t.i = " + t.i + " t.j= " + t.j); //5,6

24

25 t.test_m2(t);26 System.out.println("t.i = " + t.i + " t.j= " + t.j); //1,2

27 }28 }

3d0285a5d4821922f43945ea8d19f603.png

在第22行执行函数test_m1(t),该函数的参数引用a拷贝了引用t,即引用a获取了对象地址,a和t指向了同一个对象(i=5, j=6)。在函数

中新建了一个对象(i=1, j=2),并且使用引用b指向它。最后让引用a拷贝引用b,即引用a指向了新对象,但是引用t未发生变化,此时它

仍然指向原先的对象。

130ca62501c5ba19127e1039959f73d5.png

在第25行执行函数test_m2(t),此时该函数的引用a拷贝了引用t,即引用a获取了对象地址,a和t指向了同一个对象(i=5, j=6)。此时通过

引用a修改对象时(i=1, j=2),由于引用t仍然指向该对象,所以此时i和j的值发生变化。

5.参考文献

!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值