一、对于对象的赋值问题:
实例:
1.类Tank
public class Tank {
public int level;
public Tank(){}
}
2.类Assignment
public class Assignment {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Tank t1 = new Tank();
Tank t2 = new Tank();
t1.level = 17;
t2.level = 27;
System.out.println("1.t1.level的值是:"+t1.level+"," +
""+"t2.levle的值是:"+t2.level);
t1 = t2;
System.out.println("2.t1.level的值是:"+t1.level+"," +
""+"t2.levle的值是:"+t2.level);
t1.level=66;
System.out.println("3.t1.level的值是:"+t1.level+"," +
""+"t2.levle的值是:"+t2.level);
}
}
3.结果:
1.t1.level的值是:17,t2.levle的值是:27
2.t1.level的值是:27,t2.levle的值是:27
3.t1.level的值是:66,t2.levle的值是:66
4.说明:对于把t2的引用赋值给t1后又改变t1的成员
对于赋值操作的是一个对象的引用.所以修改t1的同时也改变了t2,这是由于t1和t2包含的是相同的引用,他们指向相同的对象。
(原本t1包含的对对象的引用时指向一个值为17的对象,在对t1赋值的时候,这个引用被覆盖了,也就是丢失了,而那个不再被引用的对象最终会被"垃圾回收器"自动清理)
二、对象的传递
实例:
1. 类Letter
class Letter{
char c;
}
2. 类PassObject
class PassObject{
public static void f1(Letter y){
y.c='z';
}
public static void f2(Letter y){
y.c='z';
}
public static void main(String []args){
//例子1
Letter x1 = new Letter();
x1.c='a';
System.out.println("1.x1.c的值:"+x1.c);
f1(x1);
System.out.println("2.x1.c的值:"+x1.c);
//例子2
Letter x2 = new Letter();
PassObject p=new PassObject();
x2.c='a';
System.out.println("1.x2.c的值:"+x2.c);
p.f1(x2);
System.out.println("2.x2.c的值:"+x2.c);
}
}
3.结果:
1.x1.c的值:a
2.x1.c的值:z
1.x2.c的值:a
2.x2.c的值:z
4.说明:对象在函数中的传递过程中(x1和x2->y),其实x1(或x2)和y最终都是指向同一对象,他们只是对象的不同别名