标题:考大家一道题(把我迷糊了) 答对"有奖"!
只看楼主
mojianpo
Rank: 1
等 级:等待验证会员
帖 子:213
专家分:0
注 册:2005-7-6
得分:0 

我分析应选10,0,10


我是莫建坡.电话:15910657130
2006-10-05 20:51
天城TC
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-10-21
得分: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 请问这里是不是写错了啊????  我认为因该是v.i=10
}
问题就上最后一个了
因为大家可能对于 java 的传递参数有些不明白
java中所有的传递方式都是传值 对于普通变量 就是把自己的副本传了进去 所以程序推出的时候 那个变量还是没有变化
而 对于向 数组和对象这类的 他们传的是地址 地址是不能被改变的 但是地址所指向的内容是可以改的
就向本题中虽然把(v=vh)但推出方法的时候 v 并没有发生变化 而他指的内容 也就是i 是可以改变的 这里变成了 20
所以正确答案是 D
10 0 20
不知道这样大家能否理解

2006-10-21 19:33
嶄ぎ儱
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2007-4-21
得分:0 
看了上面的,还是不懂?能请大虾解释下吗?

别人不给你机会,自己去创造机会.
2007-04-22 14:31
菜鸟也疯狂
Rank: 1
等 级:新手上路
帖 子:134
专家分:0
注 册:2007-3-20
得分:0 
应该是在调用another方法时,"v.i=30"就被"v.i=20"覆盖了.而"v=vh"则是将"v"指向"vh"的一个引用(即"v""vh"指向的是同一个对象),原来的那个"v"就被析构了.不知道这样对不对.期待高手解决.

2007-04-22 20:13
beyond_p
Rank: 1
等 级:新手上路
威 望:1
帖 子:114
专家分:0
注 册:2007-1-17
得分:0 
java里面有析构吗? LS的意识是说Test v=new Test(); 已经被垃圾回收了么?
当v=vh时 只不过是在another方法中对v引用的一个拷贝进行更改 并没有影响到amethod中v引用的值

例子挺好的! 不过真是古董贴 呵呵

越是深入的学习,就越来越感觉到自己知道的太少了...
2007-04-22 21:30
菜鸟也疯狂
Rank: 1
等 级:新手上路
帖 子:134
专家分:0
注 册:2007-3-20
得分:0 
以下是引用beyond_p在2007-4-22 21:30:41的发言:
java里面有析构吗? LS的意识是说Test v=new Test(); 已经被垃圾回收了么?
当v=vh时 只不过是在another方法中对v引用的一个拷贝进行更改 并没有影响到amethod中v引用的值

例子挺好的! 不过真是古董贴 呵呵

当v指向别的对象的引用的时候,它原来的那个不是被虚拟机垃圾回收了么?否则的话,后面的v.i指的到底是哪个呢?那岂不是有两个值了么?


2007-04-23 13:00
beyond_p
Rank: 1
等 级:新手上路
威 望:1
帖 子:114
专家分:0
注 册:2007-1-17
得分:0 

在amethod方法中的v引用指向的对象,在方法结束之前不是不被回收的(就算方法结束了也不未必马上就回收的!因为垃圾回收器的线程优先级是很低的!只有在JVM需要回收内存的时候才会进行垃圾内存回收)

而不管是基本数据类型还是引用类型的数据,作为方法的参数进行传递时,是对原来数据的值进行了拷贝,把拷贝的值给了该方法,所以在another方法中改变的v值只不过是原来v引用的的一个拷贝,而原来在amethod方法中的v引用并没有改变!
所以amethod方法中的v引用和another方法中v=vh后的v引用指向的是两块不同的内存空间!


越是深入的学习,就越来越感觉到自己知道的太少了...
2007-04-23 15:16
skylence
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2006-11-15
得分:0 
上面的
你分析好像很正确哦
你看下答案就知道了 是D

2007-04-25 12:17
sunshineqs
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2005-6-2
得分:0 
SCJP的考试题

2007-05-10 17:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-62155-1-1.html




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

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