Java 把对象作为参数传到一个方法里,这个是值传递还是引用传递, 为什么结果这么怪?
来源:互联网 发布:程序和软件区别 编辑:程序博客网 时间:2024/05/16 04:33
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方法参数传递的是值还是引用
- Java里到底是引用传递还是值传递
- Java中,String类型和包装类型作为参数传递时,是属于值传递还是引用传递呢?
- Java参数传递传递的是值还是引用?
- Java的对象是采用值传递还是引用传递?
- 画重点,Java方法的参数到底是值传递还是引用传递?
- java是值传递,还是引用传递?
- java是值传递还是引用传递?
- java是值传递还是引用传递
- java 是值传递还是引用传递
- 把冰卖给爱斯基摩人
- linux之sed用法
- Java笔记1 Java编程基础<1>标示符、变量、个别运算符
- kvm虚拟机热迁移流程概述
- ffmpeg简化方案---只支持h264解码,输出为yuv420
- Java 把对象作为参数传到一个方法里,这个是值传递还是引用传递, 为什么结果这么怪?
- C++多线程框架(一)--------- new一下就启动一个线程
- Android 的webview与js交互
- ffmpeg+rtsp
- Android中通过typeface设置字体
- RFC 3501学习笔记之State
- 调整数组顺序使奇数位于偶数前面
- HTML5写了个贪吃蛇,1.0版。主要玩玩canvas画画和初体验Web存储-localStorage
- JAVA多线程与并发学习总结