public class Test {
public static void main(String[] args) {
A a1=new A();
A a2=new A();
a1.name ="a1";
a2=a1;
a2.name="a2";
System.out.println("a1.name="+a1.name);
System.out.println("a2.name="+a2.name);
}
}class A {
public String name;
}运行结果为:
a1.name=a2
a2.name=a2谁能解释一下为什么a1.name=a2
以上的例子中:创建了2个对象A(或者叫2个引用)
当 a1.name="a1" 时:在对象a1的属性name赋值为a1
(也就是说a1这个引用所在的 内存空间的name属性值为a1)
当 a2=a1 时:此时的a2 的引用不在指向a2的内存空间了
而是指向了刚才的那个a1的内存空间了。此时其属性也是a1这个对象里德。
因此 这时候改了name属性的值,实际上是改的a1对象里面的属性的值
所以输出的结果 都一样a2---- 他们都是指向的同一块内存地址
不知道说清楚没。。只供参考
public static void main(String[] args) {
A a1 = new A(); // 创建对象a1
A a2 = new A(); // 创建对象a2
a1.name = "a1"; // 对对象a1的name属性赋值为"a1"
a2 = a1; // 将a2的引用指向a1 即此时a1、 a2指向同一个对象
a2.name = "a2"; // 修改a2所指向对象的属性name为"a2" 由于a1、a2指向同一个对象 所以a1中的name也为"a2"
System.out.println("a1.name=" + a1.name); // a1.name = "a2"
System.out.println("a2.name=" + a2.name); // a2.name = "a2"
}
}class A {
public String name;
}不知这样的解释 楼主能否理解不?
Java的指针其实比C更清晰
http://hi.baidu.com/emengbingkuai/album/item/16846cdbf0a3f0b177c638ac.html#
http://hi.baidu.com/emengbingkuai/album/item/16846cdbf0a3f0b177c638ac.html#
我这不是灌水,是我不会用....