答案揭晓:
3
1
b
答案分析:
/********第一段*******************/
ClassE a = new ClassE();
ClassE b = new ClassE(); //创建两个对象
a.i=1;
b.i=2; //两个对象有不同的值
b=a; //让b(b只是一个引用变量,它可以引用任何同类型的对象)也引用a所引用的对象,以后用b或者a都操作同一对象
b.i=3; //这里实际也就是改变了a所指向的对象,因为a,b都是引用了同一对象
System.out.println(a.i); //这里当然是3了
/********第二段*******************/
ClassE c = new ClassE();
ClassMain cm = new ClassMain();
c.i=1;
cm.revalue(c); //用以下代码替换这个方法
ClassE eC = c;//代表方法调用的时候,外边的一个引用变量c,方法里也有一个引用变量,为了区别,把方法的参数改成eC,调用方法的时候就是把c引用给eC,也就是让eC引用在外边创建的对象
ClassE d = new ClassE(); //这里创建了一个新的对象
d.i=2;
eC=d; //方法里的引用变量eC被改了引用,引用了一个别的对象,这里时候它就不引用外边的那个对象了,所以与外边的对象无关了
d.i=3;
System.out.println(c.i); //方法里没有对外边的所创建的对象修改,所以它的i还是1
/********第三段*******************/
String s1 = new String();
String s2 = new String(); //s1,s2都只是引用变量
s1="a"; //s1被改成引用"a"这个对象,它不引用原来的对象了
s2="b"; //s2被改成引用"b"这个对象,它不引用原来的对象了
s1=s2; //让s1引用s2所引用的对象,也就是s1这时候也引用"b"这个对对象
s2="c"; //s2被改成引用"c"这个对象,但它没有改变s1的引用.
System.out.println(s1); //由上面可知:s1这时候是引用"b"这个对象的