源码如下:
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]
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的引用
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。