大家都知道Java是面向对象编程,那么有没有考虑过在传递的过程中,究竟传递的是值,还是值的引用呢?下面我们先来看一下什么事值传递和引用传递。
值传递:指在调用函数时将实际参数复制一份传递到函数中,这样如果函数中对值进行修改,并不会影响到实际参数
引用传递:指在调用函数时,将实际参数的地址直接传递到函数中,那么在函数中对参数进行修改将会影响到实际参数
解释:值传递类似于,你有一把钥匙,你朋友想去你家,你把钥匙复制了一把给他,然后他去你家。
引用传递类似于,你有一把钥匙,你朋友想去你家,你把自己的钥匙给了他,然后他去你家。
但是不管哪种情况,你朋友把你家电视砸了,把门拆了,你还是会有影响的。
所以,值传递并不会影响原来的实际参数。但是引用传递因为传递的是实际地址,对地址所指向的对象修改时会影响实际对象的。
引用传递:public static void main(String[] args){User user = new User();user.setName("ming");user.setAge(20);System.out.println(user); // User{name="ming",age=20}pass(user);System.out.println(user); // User{name="hong",age=20}
}public void pass(User user){user.setName("hong");System.out.println(user);
}
值传递:public static void main(String[] args){User user = new User();user.setName("ming");user.setAge(20);System.out.println(user); // User{name="ming",age=20}pass(user);System.out.println(user); // User{name="ming",age=20}
}public void pass(User user){hong = new User(); // 此时 hong指向一个新的User对象地址,所以并不会影响原实际对象hong.setName("hong");System.out.println(user);
}