您的位置:首页 > 编程语言 > Java开发

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, 到底是 指向以前对象呢,还是 新对象呢?? 我迷惑了。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐