java 对象、对象引用 |
您所在的位置:网站首页 › java中对象与类的关系 › java 对象、对象引用 |
1.简介 在Java中对象和对象引用是两个容易混淆的概念,下面通过代码示例进行详细的说明。 2.含义 为方便说明,首先定义一个Person类,它有name和age两个属性。 1 public class Person { 2 3 private String name; 4 private int age; 5 6 public Person(String name, int age){ 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 class Test { 2 private int i, j; 3 4 private void test_m1(Test a) { 5 Test b = new Test(); 6 b.i = 1; 7 b.j = 2; 8 a = b; 9 } 10 11 private void test_m2(Test a) { 12 a.i = 1; 13 a.j = 2; 14 } 15 16 public static void main(String[] args) { 17 Test t = new Test(); 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 }在第22行执行函数test_m1(t),该函数的参数引用a拷贝了引用t,即引用a获取了对象地址,a和t指向了同一个对象(i=5, j=6)。在函数 中新建了一个对象(i=1, j=2),并且使用引用b指向它。最后让引用a拷贝引用b,即引用a指向了新对象,但是引用t未发生变化,此时它 仍然指向原先的对象。 在第25行执行函数test_m2(t),此时该函数的引用a拷贝了引用t,即引用a获取了对象地址,a和t指向了同一个对象(i=5, j=6)。此时通过 引用a修改对象时(i=1, j=2),由于引用t仍然指向该对象,所以此时i和j的值发生变化。 5.参考文献 https://www.cnblogs.com/dolphin0520/p/3592498.html https://www.iteye.com/blog/zwmf-1738574 !!!
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |