public class A {
int a = 0;
void setA(int value)
{
a = value;
}
int getA()
{
return a;
}
}
public class B {
private A m_a = null;
public B(A a)
{
m_a = a;
}
public void setB()
{
m_a.setA(10);
}
public void setBN()
{
m_a = null;
}
public int getA()
{
return m_a.getA();
}
public A getAA()
{
return m_a;
}
}
A a1 = new A();
a1.setA(20);
System.out.println("A.a1=" + a1.getA());
A a2 = new A();
a2.setA(40);
System.out.println("A.a2=" + a2.getA());
A aa1 = a1;
System.out.println("A.aa1=" + aa1.getA());
A aa2 = a2;
System.out.println("A.aa2=" + aa2.getA());
B b = new B(a1);
b.setB();
System.out.println("B.a1=" + b.getA());
System.out.println("A.a1=" + a1.getA());
b.setBN();
if(null == b.getAA())
{
System.out.println("fuck B");
}
if(null == a1)
{
System.out.println("fuck A");
}
B b2 = new B(aa1);
System.out.println("B.aa1=" + b2.getA());
aa1 = a2;
System.out.println("B.aa1=" + b2.getA());
System.out.println("A.a2=" + a2.getA());
A.a1=20
A.a2=40
A.aa1=20
A.aa2=40
B.a1=10
A.a1=10
fuck B
B.aa1=10
B.aa1=10
A.a2=40
Tips:
a1 作为类B构造函数 参数 构造B 其实 在B中应该是创建了一个引用 这个引用指向a1 所指向的对象;
改变B中这个引用的指向不会影响a1的指向 ;
但是改变B中这个引用指向的对象 则一定会造成a1指向的对象的改变 ,因为他们指向相同的对象;