开发者社区> 问答> 正文

java 对象引用关系疑问

蛮大人123 2016-06-06 15:15:50 742

源码如下:
vo1被赋值null后 vo2不受影响, 请帮忙解释下原理 .

 Product vo1 = new Product(1, "iphone 5s", 5000) ;
        Product vo2 = vo1 ;
        System.out.println("vo1: " + vo1);
        System.out.println("vo2: " + vo2);
        vo1.setId(222); // 因为是引用类型 所以 vo1与vo2都会被赋值
        System.out.println("vo1: " + vo1);
        System.out.println("vo2: " + vo2);
        vo1 = null ;    // vo1是null 但 vo2还是有值 . 原理 ??
        System.out.println("vo1: " + vo1);
        System.out.println("vo2: " + vo2);

打印结果:

vo1: Product [id=1, name=iphone 5s, price=5000]
vo2: Product [id=1, name=iphone 5s, price=5000]
vo1: Product [id=222, name=iphone 5s, price=5000]
vo2: Product [id=222, name=iphone 5s, price=5000]
vo1: null
vo2: Product [id=222, name=iphone 5s, price=5000]
Java iOS开发
分享到
取消 提交回答
全部回答(1)
  • 蛮大人123
    2019-07-17 19:28:43

    vo2已经指向了vo1所指向的地址,vo1=null,只是vo1这个变为空指针,但是它原来指向的内容并没有空,被vo2指向着.
    类:是对现实存在事物的一种抽象,一种高度的概括。
    对象:是类的实例,是类中的一个个体,它具有该类的属性。
    引用:当你引入一个包时,你可以引用该包内的类的对象,也就是说,引用针对的是类的对象。
    【1】类和对象
    class A{
    public void test(){ ... }
    }
    A a = new A(); 这里a就是类A的对象。
    【2】引用
    class B{
    public void setA(A a){
    ...
    }
    }
    B b = new B();
    b.setA(a);
    这里的a就是A的引用

    0 0

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题