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就改变了。为什么?
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就改变了。为什么?
c = new Change_2(2);
// 此c非彼c
}这个实际上又创建了一个新的对象。并且没有传递出去。而System.out.println("after change:" + c.a);
打印的是之前创建的对象的成员变量然后你又使用c 重新创建了一个object再去打印a的值。
实际上是打印这个新的c的对象的成员变量。可以简单的理解 变量的作用域。
影响不到main中
c = new Change_2(2);
}} 这里的c只是传过来的对象的引用的COPY.
只是change中的局部变量.退出change方法,这个c也就消失了.
JAVA里参数传值,是值传递.
对于change(C),只是传递对象的一个拷贝,而引用对象是没有改变的.
e.a=5;
}