| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5713 人关注过本帖
标题:考大家一道题(把我迷糊了) 答对"有奖"!
只看楼主 加入收藏
xhdwell
Rank: 1
等 级:新手上路
帖 子:124
专家分:0
注 册:2006-5-15
收藏
得分:0 
以下是引用wtyl0088在2006-5-7 23:22:00的发言:
对于这道题的一点看法
答案是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
不知道这样大家能否理解

这位大虾分析的的确很精妙,但我还是有一点不是很清楚,为什么第一个输出是10呢 ?
System.out.println(v.i+" "+i);//这里输出 v.i=20 因为已经被改过了 而 i 也就变成了 0
作者说V.i=20因为已经被改过~我也知道被改过了,但改成什么了我却不清楚~~10是怎么得出来的我也莫名其妙!!


坚持自己的选择!向着理想迈出了第一步!
2006-05-17 18:58
xhdwell
Rank: 1
等 级:新手上路
帖 子:124
专家分:0
注 册:2006-5-15
收藏
得分:0 
我知道了~~第一个10和这个题目根本就没关系

坚持自己的选择!向着理想迈出了第一步!
2006-05-17 19:05
farseer
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-3-25
收藏
得分:0 
以下是引用zhangling在2006-5-7 16:10:00的发言:
v.i=20;//关键是在这里,v是test的一个对象,对它赋值是对对象中的变量赋值.相当于v.i=30已经被覆盖了.而下面的v=vh是将一个对象的指针指向另一个对象,前提是vh是在一个方法中创建的,相当于局部的对象,在程序返回时该对象被析构.而在打印v.i时,v这个对象还没有被析构

说的很对阿,令我茅塞顿开。

我选D

2006-05-18 13:22
iyuohz
Rank: 1
等 级:新手上路
帖 子:107
专家分:0
注 册:2006-2-22
收藏
得分:0 
好题

2006-05-21 16:49
shiyide
Rank: 2
等 级:新手上路
威 望:4
帖 子:297
专家分:0
注 册:2006-2-22
收藏
得分:0 
答案为什么会是最后一个,我头大了``

学好编程,为中国的软件事业出一份力。
2006-05-22 07:43
shiyide
Rank: 2
等 级:新手上路
威 望:4
帖 子:297
专家分:0
注 册:2006-2-22
收藏
得分:0 
我还是有点不明白 我想多问一句`
那就是v=vh这个按引用传值后 V的值怎么会不变还是20?

学好编程,为中国的软件事业出一份力。
2006-05-22 07:53
jiqijiqi
Rank: 1
等 级:新手上路
帖 子:28
专家分:0
注 册:2006-5-27
收藏
得分:0 
刚开始以为是10,0,10 后来想通了

amethod()方法的参量一个是对象的引用,引用的是一个内存地址,把参量名字认为是
public void another(Test g,int i) 如果对g对象里的参量直接修改,就相当于对v对象里的i进行修改,所以先输出20,0 在这个方法里g又指向VH对象,但是V并没有改变,方法返回后 V.i的值为20.

2006-05-27 21:17
shiyide
Rank: 2
等 级:新手上路
威 望:4
帖 子:297
专家分:0
注 册:2006-2-22
收藏
得分:0 

我也搞清楚了`
还真有点头疼`


学好编程,为中国的软件事业出一份力。
2006-05-28 21:02
yanglove77
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2006-6-27
收藏
得分:0 
好题啊,我是一个新手啊,上来选错了,后来想想是自己想通了啊,谢谢出题的人啊,希望多出点个类型的题啊
2006-07-06 20:59
hujf_go
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2006-5-13
收藏
得分:0 

刚开始以为是20 0 20,但看到“对于普通变量 就是把自己的副本传了进去 所以程序推出的时候 那个变量还是没有变化”才茅塞顿开!!!!!!!


天未塌,我还在,就让风雨迎面来~
2006-07-06 21:43
快速回复:考大家一道题(把我迷糊了) 答对"有奖"!
数据加载中...
 
   



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

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