JAVA传递参数问题

blueice33303 2008-04-02 05:55:47
public class Change_2 {
int a = 0;

Change_2(int a) {
this.a = a;
}

public static void main(String[] args) {
Change_2 c = new Change_2(1);
System.out.println("ori Change_2:" + c.a);

change(c);System.out.println("after change:" + c.a);

c=new Change_2(2); System.out.println("change Change_2:" + c.a);

System.out.println("change Change_2:" + c.a);
}


static void change(Change_2 c) {
c = new Change_2(2);
}}

问题:我的CHANGE()方法和在 MAIN里的一 条语句是一样的都是c = new Change_2(2);但执行change(c)后,main里C没改变,但在main里执行c = new Change_2(2);C就改变了。为什么?
...全文
149 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
网络咖啡 2008-04-02
  • 打赏
  • 举报
回复
我的BLOG有篇专门讲参数传递的文章
  • 打赏
  • 举报
回复
别指望java去改变参数本身 在函数里面出现的跟参数同名的对象都是一个临时对象与传进来的那个无关 但是可以直接用c.a去改变它

static void change(Change_2 e) {
e.a=5;
}
aaronshai 2008-04-02
  • 打赏
  • 举报
回复
change(c);
JAVA里参数传值,是值传递.
对于change(C),只是传递对象的一个拷贝,而引用对象是没有改变的.
hmsuccess 2008-04-02
  • 打赏
  • 举报
回复
同意楼上的,这是变量的作用域问题
胡矣 2008-04-02
  • 打赏
  • 举报
回复
static void change(Change_2 c) {
c = new Change_2(2);
}}

这里的c只是传过来的对象的引用的COPY.
只是change中的局部变量.退出change方法,这个c也就消失了.
fuyou001 2008-04-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 k7sem 的回复:]
static void change(Change_2 c) {
c = new Change_2(2);
// 此c非彼c
}

这个实际上又创建了一个新的对象。并且没有传递出去。

而System.out.println("after change:" + c.a);
打印的是之前创建的对象的成员变量

然后你又使用c 重新创建了一个object再去打印a的值。
实际上是打印这个新的c的对象的成员变量。

可以简单的理解 变量的作用域。
[/Quote]
friend556 2008-04-02
  • 打赏
  • 举报
回复
change中改变的是形参
影响不到main中
  • 打赏
  • 举报
回复
因为你在change方法中给change方法的参数赋了新的对象,而没有改变main方法中的c!

change方法中的c , 就像change方法的局部变量一样,只是引用的内存和main方法中的c是一块地方,你把change方法中的c重新引用别的地方,并不会改变main方法中的c.

是不是不够清楚啊。。。
贝壳鱼 2008-04-02
  • 打赏
  • 举报
回复
static void change(Change_2 c) {
c = new Change_2(2);
// 此c非彼c
}

这个实际上又创建了一个新的对象。并且没有传递出去。

而System.out.println("after change:" + c.a);
打印的是之前创建的对象的成员变量

然后你又使用c 重新创建了一个object再去打印a的值。
实际上是打印这个新的c的对象的成员变量。

可以简单的理解 变量的作用域。

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧