| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5713 人关注过本帖
标题:考大家一道题(把我迷糊了) 答对"有奖"!
只看楼主 加入收藏
qsrock
Rank: 1
等 级:新手上路
帖 子:255
专家分:0
注 册:2005-12-29
收藏
得分:0 
斑竹可不可以全面地解释下!~我看了还是很迷糊!~
我自己的话我会选B的!??
我是这样认为的!
class Test{
       public int i=10;
}
public class ObParm{
   public static void main(String argv[]){
            ObParm o=new ObParm();
            o.amethod();
   }
public void amethod(){
  int i=99;
  Test v=new Test();
  v.i=30;
  another(v,i);
  System.out.println(v.i);//然后在这里再输出v.i=30

public void amethod(){

i=0;
v.i=20;
Test vh=new Test();
v=vh;
System.out.println(v.i+" "+i);//(1)先调用这里输出 v.i=20 i=0
}

[此贴子已经被作者于2006-5-6 23:51:58编辑过]

2006-05-06 23:51
qsrock
Rank: 1
等 级:新手上路
帖 子:255
专家分:0
注 册:2005-12-29
收藏
得分:0 
好象不能运行似的!???
2006-05-06 23:53
ada518618
Rank: 1
等 级:新手上路
帖 子:184
专家分:0
注 册:2006-3-27
收藏
得分:0 

不对嘛!?
不晓得喔!
不过很想知道为什么!
什么时候公布答案啊!?


Eclipse!尽管我现在不懂祢,可是我却对你情有独钟……
2006-05-07 00:35
★王者至尊★
Rank: 1
等 级:新手上路
帖 子:528
专家分:0
注 册:2006-3-28
收藏
得分:0 

先让大家思考几天 再全面分析 呵呵...


------Java 爱好者,论坛小混混,学习中------
2006-05-07 09:41
zhangling
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2006-4-25
收藏
得分:0 
我认为,
class Test{
public int i=10;
}
public class ObParm{
public static void main(String argv[]){
ObParm o=new ObParm();
o.amethod();
}
public void amethod(){
int i=99;
Test v=new Test();
v.i=30;
another(v,i);//这里调用another子程序
System.out.println(v.i);
public void amethod(){

i=0;
v.i=20;//关键是在这里,v是test的一个对象,对它赋值是对对象中的变量赋值.相当于v.i=30已经被覆盖了.而下面的v=vh是将一个对象的指针指向另一个对象,前提是vh是在一个方法中创建的,相当于局部的对象,在程序返回时该对象被析构.而在打印v.i时,v这个对象还没有被析构
Test vh=new Test();
v=vh;
System.out.println(v.i+" "+i);//(1)先调用这里输出 v.i=20 i=0
}
2006-05-07 16:10
fanghuishang
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-5-5
收藏
得分:0 

俺也认为是30 20 0

有大虾指点指点吗?最好是中文多点的~
英语B级还没过呢~

2006-05-07 20:02
wtyl0088
Rank: 1
等 级:新手上路
帖 子:109
专家分:0
注 册:2006-3-24
收藏
得分:0 
对于这道题的一点看法
答案是d
class Test{
public int i=10;
}
public class ObParm{
public static void main(String argv[]){
ObParm o=new ObParm();
o.amethod();//首先让我们看这里 o 调用了方法amethod
}
public void amethod(){
int i=99;//一个重新定义的局部变量与前面的i 没什么关系
Test v=new Test();//实例化
v.i=30;//将v的属性i 该为30
another(v,i);//问题出来了 这里一共有两个参数 一个是 对象 一个是普通变量
System.out.println(v.i);
}
public void another(Test v, int i){//再来看这里
i=0;//首先另那个 int i=99 变成 i=0;
v.i=20;//这里另对象的i属性为20
Test vh=new Test();
v=vh;//这里把一个新生成的实例 附给了 v 这样 v 就指向了 vh 的那片地址
System.out.println(v.i+" "+i);//这里输出 v.i=20 因为已经被改过了 而 i 也就变成了 0
}
}
问题就上最后一个了
因为大家可能对于 java 的传递参数有些不明白
java中所有的传递方式都是传值 对于普通变量 就是把自己的副本传了进去 所以程序推出的时候 那个变量还是没有变化
而 对于向 数组和对象这类的 他们传的是地址 地址是不能被改变的 但是地址所指向的内容是可以改的
就向本题中虽然把(v=vh)但推出方法的时候 v 并没有发生变化 而他指的内容 也就是i 是可以改变的 这里变成了 20
所以正确答案是 D
10 0 20
不知道这样大家能否理解

2006-05-07 23:22
★王者至尊★
Rank: 1
等 级:新手上路
帖 子:528
专家分:0
注 册:2006-3-28
收藏
得分:0 
wtyl0088
的解释相当精确恰当...
希望大家能从中弄懂java的参数传递

------Java 爱好者,论坛小混混,学习中------
2006-05-07 23:26
xuyijin
Rank: 1
等 级:新手上路
威 望:1
帖 子:90
专家分:0
注 册:2006-4-13
收藏
得分:0 

受益不浅呀!


初学java,希望各位大虾多多指教!!
2006-05-08 13:12
liagqun163
Rank: 1
等 级:新手上路
帖 子:38
专家分:0
注 册:2006-5-4
收藏
得分:0 
哈哈,其实就是引用赋值的问题,受益菲浅。不过还是建议大家看看C++里的引用变量赋值的问题。在C++里这里的v=vh就相当于&v=&vh,正如一楼所说的引用本身没有发生变化,而是被引用的内容发生了变化

2006-05-08 15:51
快速回复:考大家一道题(把我迷糊了) 答对"有奖"!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014030 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved