为什么情况1的输出是5,而情况2的输出是1呢?
情况1:
public class Draft {
public static void main(String[] args){
Draft1 draft1 = new Draft1 ();
draft1.i = 1;
test (draft1);
System.out.println (draft1.i );
}
public static void test(Draft1 draft1){
draft1.i = 5;
}
}
class Draft1{
int i;
}
情况2:
public class Draft {
public static void main(String[] args){
Draft1 draft1 = new Draft1 ();
draft1.i = 1;
test (draft1);
System.out.println (draft1.i );
}
public static void test(Draft1 draft1){
draft1 = new Draft1 ();
draft1.i = 5;
}
}
class Draft1{
int i;
}
红色线为test方法做的操作
重点就在test方法中。这里有个引用传递的概念弄明白就懂了
第一种情况是修改引用对象的值,能理解吧。第二种情况,在test里面重新构建了一个对象,然后修改新对象的值,对原对象是没有影响的,所以原对象的值还是1,能理解不?不能理解再联系我
java中对象类型是引用传递,所以情况1打印的是5。情况2在test方法中重新new了一个对象,此时test中的draft1指向了新的对象,而main中的drfatl指向的是原来的对象,所以修改新的对象属性不会改变原来对象的属性的。
情况1:java中类在函数中属于 址传递 改变对象属性值 对对象的修改同样生效
情况2:相当于在函数内部定义了 一个变量名称相同的局部变量。当全局与局部变量同名时 你的修改相当于是对局部变量的修改