发表新主题 回复该帖子
主题:考考你的java基础,认为java基础不错的进来看看
唧唧
帖子档案  楼主 考考你的java基础,认为java基础不错的进来看看   Post by : 2008-07-17 14:52:10.0
  • 幼儿园
  • 幼儿园
  • UID:3
  • 主题:342
  • 帖子:781
  • 加为好友 加为好友    发送短信 发送短信

看以下代码,先别运行,预测一下输出结果。

java代码
  1. public class ClassMain {   
  2.     public static void main(String args[]) {   
  3.         /********第一段*******************/   
  4.         ClassE a = new ClassE();   
  5.         ClassE b = new ClassE();   
  6.       
  7.         a.i=1;   
  8.         b.i=2;   
  9.         b=a;   
  10.         b.i=3;   
  11.       
  12.         System.out.println(a.i);   
  13.       
  14.         /********第二段*******************/   
  15.         ClassE c = new ClassE();   
  16.         ClassMain cm = new ClassMain();   
  17.         c.i=1;   
  18.         cm.revalue(c);   
  19.         System.out.println(c.i);      
  20.       
  21.         /********第三段*******************/ 
  22.         String s1 = new String();   
  23.         String s2 = new String();   
  24.         s1="a";   
  25.         s2="b";   
  26.         s1=s2;   
  27.         s2="c";   
  28.         System.out.println(s1);   
  29.     }   
  30.  
  31.     public void revalue(ClassE c) {   
  32.         ClassE d = new ClassE();   
  33.         d.i=2;   
  34.         c=d;   
  35.         d.i=3;   
  36.     }   
  37. }  
  38.  
  39. class ClassE {   
  40.     int i=0;   

 

签名
 ★★★★★★★★
 纵里寻她千百度,蓦然回首,那人却在,灯火阑珊处!
 MyBlog :http://blog.javawind.net
返回页面顶部  

唧唧
2F Re:考考你的java基础,认为java基础不错的进来看看   Post by : 2008-07-17 14:55:37.0
  • 幼儿园
  • 幼儿园
  • UID:3
  • 主题:342
  • 帖子:781
  • 加为好友 加为好友    发送短信 发送短信

答案揭晓:

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"这个对象的 

签名
 ★★★★★★★★
 纵里寻她千百度,蓦然回首,那人却在,灯火阑珊处!
 MyBlog :http://blog.javawind.net
返回页面顶部  


CopyRight © 2008-2009 JavaWind.Net Studio All Rights Reserved
Powered By JWind.BBS Vesion 1.0.0 Beta1 Processed in 15 ms,0 (Queries)  Gzip enabled

WAP - 清除Cookies - 联系我们 - JavaWind.Net Studio - Archiver - TOP Valid XHTML 1.0 Transitional Valid CSS! 粤ICP备07511478号