Java 把对象作为参数传到一个方法里,这个是值传递还是引用传递, 为什么结果这么怪?
2013-05-22 14:51
1261 查看
public class main {
private static void updateCustomer(Customer customer) {
System.out.println("update before: " + customer.getName());
customer.setName("abc");
System.out.println("update after: " + customer.getName());
}
private static void updateCustomer2(Customer customer) {
System.out.println("update before: " + customer.getName());
customer = new Customer();
customer.setName("abc");
System.out.println("update after: " + customer.getName());
}
public static void main(String[] args) {
Customer customer = new Customer();
customer.setName("1");
// updateCustomer(customer);
// System.out.println("result1: " + customer.getName());
updateCustomer2(customer);
System.out.println("result2: " + customer.getName());
}
}
注释 updateCustomer 和 updateCustomer2 的任一个方法。。不要同时都运行, 一次运行一个 。看两个方法下来的结果。。。。
跑updateCustomer , 结果:
update before: 1
update after: abc
result1: abc
(这个很好理解, 对象的引用地址传递)
跑updateCustomer 2 , 结果:
update before: 1
update after: abc
result2: 1
(为什么这个最后结果为1 啊, 难道说, 方法里 new了一个新的, 就不会影响之前的对象了。。。 那customer 这个变量 不是一个地址引用吗?
既然在updateCustomer 2里,它指向了一个新对象。。 为什么外面的 customer 还是指向以前的 地址引用。。。 这两个customer 到底是 同一个变量, 还是不同的变量呢??)
我的疑惑如下:
在main 方法里。。。有如下代码。。
public static void main(String[] args) {
Customer customer = new Customer(); // 这里, customer 指向一个 新对象的 地址。。。 customer变量 只是一个指向一个地址的引用。。
customer.setName("1");
updateCustomer2(customer); // 关键的地方来了, customer 作为变量, 传进方法updateCustomer2里。。具体代码如下:
private static void updateCustomer2(Customer customer) { // 这里, customer 指向以前的对象的地址。。。
System.out.println("update before: " + customer.getName());
customer = new Customer(); // 这里 customer 指向了一个 新对象的 地址。。
customer.setName("abc");
System.out.println("update after: " + customer.getName());
}
//跳出来,还是回到 main 方法里。。。
System.out.println("result2: " + customer.getName()); // 这里, customer, 到底是 指向以前对象呢,还是 新对象呢?? 我迷惑了。。。
private static void updateCustomer(Customer customer) {
System.out.println("update before: " + customer.getName());
customer.setName("abc");
System.out.println("update after: " + customer.getName());
}
private static void updateCustomer2(Customer customer) {
System.out.println("update before: " + customer.getName());
customer = new Customer();
customer.setName("abc");
System.out.println("update after: " + customer.getName());
}
public static void main(String[] args) {
Customer customer = new Customer();
customer.setName("1");
// updateCustomer(customer);
// System.out.println("result1: " + customer.getName());
updateCustomer2(customer);
System.out.println("result2: " + customer.getName());
}
}
注释 updateCustomer 和 updateCustomer2 的任一个方法。。不要同时都运行, 一次运行一个 。看两个方法下来的结果。。。。
跑updateCustomer , 结果:
update before: 1
update after: abc
result1: abc
(这个很好理解, 对象的引用地址传递)
跑updateCustomer 2 , 结果:
update before: 1
update after: abc
result2: 1
(为什么这个最后结果为1 啊, 难道说, 方法里 new了一个新的, 就不会影响之前的对象了。。。 那customer 这个变量 不是一个地址引用吗?
既然在updateCustomer 2里,它指向了一个新对象。。 为什么外面的 customer 还是指向以前的 地址引用。。。 这两个customer 到底是 同一个变量, 还是不同的变量呢??)
我的疑惑如下:
在main 方法里。。。有如下代码。。
public static void main(String[] args) {
Customer customer = new Customer(); // 这里, customer 指向一个 新对象的 地址。。。 customer变量 只是一个指向一个地址的引用。。
customer.setName("1");
updateCustomer2(customer); // 关键的地方来了, customer 作为变量, 传进方法updateCustomer2里。。具体代码如下:
private static void updateCustomer2(Customer customer) { // 这里, customer 指向以前的对象的地址。。。
System.out.println("update before: " + customer.getName());
customer = new Customer(); // 这里 customer 指向了一个 新对象的 地址。。
customer.setName("abc");
System.out.println("update after: " + customer.getName());
}
//跳出来,还是回到 main 方法里。。。
System.out.println("result2: " + customer.getName()); // 这里, customer, 到底是 指向以前对象呢,还是 新对象呢?? 我迷惑了。。。
相关文章推荐
- java面试题:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- Java - 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- java面试题解惑:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 当一个对象被当做参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 【java】值传递和引用传递---对象作为方法的参数传入属于哪种传递
- java的方法调用,参数是按值传递还是按引用传递
- Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?
- 当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的.
- 关于js中一个对象当做参数传递是按值传递还是按引用传递的个人看法
- 画重点,Java方法的参数到底是值传递还是引用传递?
- 关于Java对象作为参数传递是传值还是传引用的问题
- 关于js中一个对象当做参数传递是按值传递还是按引用传递的个人看法
- java 方法中参数是值传递还是引用传递
- java学习笔记(四)----对象、数组作为参数传递,静态变量、静态方法的使用,内部类,使用文档注释
- Java方法参数的传递机制,值传递?引用传递?