java的问题 。。

[复制链接]
查看11 | 回复1 | 2009-12-27 14:20:06 | 显示全部楼层 |阅读模式
首先你的代码有问题,连个main方法都没public class Example { String str = new String("good"); public static void main(String[] args) {Example ex = new Example();ex.change(ex.str);System.out.print(ex.str); } public void change(String str) {str = "test ok";System.out.println(str); }}看上面的代码,在你的change方法中添加了一个后台输出,结果可以看出,输出地sta值就是你希望的test ok,但是最终结果还是good,原因其实很简单你的方法里的str表示的是你传进来的参数,你这个方法所做的仅仅是改变了你这个参数的值,但是根本没有涉及到对象内的参数的变化,如果将方法改为} public void change(String str) {this.str = "test ok"; }那么结果就是你想要的了。
回复

使用道具 举报

千问 | 2009-12-27 14:20:06 | 显示全部楼层
因为在change调用的时候传的参数是传值而不是传址。当函数调用完毕,change的参数str作为一个局部变量就由java的回收机制给回收了,而程序中原来的str还是原来的str,这个str的作用范围在遇到change的str时候就由change的局部变量str作用。String str=new String("good"); 不起作用也没改变。一句话。两个str不同,在内存中开的空间地址也不同,故对两个str分别操作互补影响。也要注意java函数调用一般是传值而不是传址。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行