一个java初学者的问题

请教大虾,一个简单的JAVA程序的问题。程序源代码如下所示:publicclassExam3{staticdoubled;publicstaticvoidmain(Str... 请教大虾,一个简单的JAVA程序的问题。
程序源代码如下所示:
public class Exam3
{
static double d;
public static void main(String args[])
{
int i;
Exam3 pt= new Exam3;
i=5;
pt.changeInt(i);
System.out.println("int type value is:"+i);
pt.d=6.25;
pt.chageDouble(pt);
System.out.println("double type value is:"+d);
}
public void changeInt(int v)
{v=10;}
public void changeDouble(Exam3 ref)
{ref.d=10.5;}
}

执行程序后,输出结果如下:
int type value is:5
double type value is:10.5

我的疑问是:1.该程序定义的方法changeInt()中,形参为int型数,可是为什么该方法被调用后结果是使得 i 是5而不是10呢?
2.另一个方法的形参为对象,可是结果为什么是10.5呢?
3.书上对该程序的解析有一句话:“这两个方法实际上采用了不同的调用方式,前一个方法传递变量值;后一个方法传递地址值。因此,前一种调用在被调用方法中改变参数值,对调用方法的参数没有影响;后一种调用在被调用方法中改变参数值,对调用方法的参数没有影响,所以获得上述结果”
这句话中我对“前一个方法传递变量值;后一个方法传递地址值”不是很理解,希望各位大虾能够给予帮助,谢谢啦,不甚感激啊

另外,这段程序中,哪个是调用方法,哪个是被调用方法啊(我害怕我的想法是错的,所以想求证一下哈)?
展开
 我来答
mengqingyu555
2008-05-11 · TA获得超过167个赞
知道答主
回答量:91
采纳率:0%
帮助的人:59.3万
展开全部
以上各位都很正确,小弟也总结一下

java中的参数传递就是值传递

只是值传递传递的值的内容是不同的,也就出现了值传递和引用传递之分。

当参数是基本类型时,当实参传递给行参时是把实参的值复制到了形参在内存中开辟的空间中,复制过后他们之间就没有关联了,如果你调用的方法有返回值那么你可以得到你要的结果,否则当被调函数运算结束后不会对实参有任何影响。

当参数是对象时,传递的值是这个对象在内存中的地址,那么形参和实参存的是一个内存地址,当方法执行,形参改变时,实参的值当然也就改变了。

在你的changeInt(int i)方法加个返回值就可以了。

你的changeInt()和changeDouble()就是被调用方法了,你现在是在main()方法中调用这两个方法,main()方法应该可以看成是调用方法了,其实就是在main()方法中调用别的方法,那你调用的方法当然就是被调方法了
百度网友c091979
2008-05-11
知道答主
回答量:26
采纳率:0%
帮助的人:0
展开全部
第一个方法传递的是i的值
调用pt.changeInt(i) 就等于调用了 pt.changeInt(5)
实际上就是把i的值5传给changeInt()方法,i当然不会改

第二个方法传递的Exam3对像,也就是ref在内存中的地址
调用pt.chageDouble(pt) 就等于把 对象pt的地址 传给了chageDouble()方法,当然 对象ref的也是指向pt在内存中的引用快,当改变ref.d的值时,就等于改变了 pt.d的值
自己好好理解~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
karlot
2008-05-11
知道答主
回答量:3
采纳率:0%
帮助的人:3662
展开全部
基本类型是值传递,只是把值拷贝过去
引用类型(对象类型)是这个对象的引用传递过去
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lvbaolei
2008-05-11
知道答主
回答量:28
采纳率:0%
帮助的人:10.1万
展开全部
这道题就是考察参数传递的变量值还是变量的地址,以及这2者的区别。你可以这样理解:
假如你要把你手中的一个苹果给我:
如果你是又买个一个苹果(复制了一个)给我,那就是传值,那我把你传给我的苹果是吃了还是仍了,你就管不到了,你手中拿的是你本来那个(i打印5);
而如果是传址,这相当于我和你只拥有一个苹果,如果我把苹果吃了或仍了,你也就没有了(d打印10.5)。
你自己多体会下,时间久了就应该理解了~~~~~呵呵(感觉自己这个例子举的8错~~~~~自己鼓励下自己~~~~~~~)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
乌微月2S
2008-05-11 · TA获得超过5037个赞
知道大有可为答主
回答量:5361
采纳率:42%
帮助的人:2901万
展开全部
pt.changeInt(i);
System.out.println("int type value is:"+i); \

public void changeInt(int v)
{v=10;}
java中对象是值传递,基本型是地址传递。java的特性。
public void changeInt 雾返回类型,所以i=5;

pt.d=6.25;是对象中属性,public void changeDouble(Exam3 ref)
{ref.d=10.5;}
}
把地址中值改变了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5eff51004
2008-05-12 · TA获得超过246个赞
知道答主
回答量:180
采纳率:0%
帮助的人:103万
展开全部
楼主的程序本身都不能运行的...各位高人也不先运行一下就在那发表意见.....
原程序有两处错:(1)Exam3 pt= new Exam3; 应改为Exam3 pt= new Exam3(); (2)pt.chageDouble(pt); 方法名错误,应该是changeDouble
实践是检验真理的唯一方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式