开发者社区> 问答> 正文

java 对象引用关系疑问

源码如下:
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]

展开
收起
蛮大人123 2016-06-06 15:15:50 2066 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    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的引用

    2019-07-17 19:28:43
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载