黑马程序员技术交流社区

标题: 对象作为参数传递的问题 [打印本页]

作者: wangzhaoxu    时间: 2014-4-14 12:51
标题: 对象作为参数传递的问题
当一个对象作为参数传递给函数的时候,是会新创建一个新的对象还是只是想对象的引用传递进去?
作者: 曹冬明    时间: 2014-4-14 12:58
貌似java中传递的都是引用,如果传递的是值,也就是一份拷贝,那么函数操作完了,对原数据没有产生效果,这个问题在C,C++和Python中我就研究过,java倒是没担心过这个问题,我觉得传的都是引用
作者: luoyilan222    时间: 2014-4-14 13:02
引用传递进去?
作者: wangzhaoxu    时间: 2014-4-14 13:07
曹冬明 发表于 2014-4-14 12:58
貌似java中传递的都是引用,如果传递的是值,也就是一份拷贝,那么函数操作完了,对原数据没有产生效果,这 ...

那么应该是操作的同一对象了,对吧
作者: z1342802487    时间: 2014-4-14 16:20
参数是对象,传递过去的是引用(即地址),当这个对象里面的内容改变后,不影响这个对象的地址,即对象地址没有变.下面是演示
  1. public class Test
  2.         {  
  3.                 public static void main(String[] args)
  4.                         {  
  5.                                 Person p1=new Person("张三",29);  
  6.                         Person p2=new Person("李四",24);  
  7.                         System.out.println("交换前");  
  8.                         p1.display();  
  9.                         p2.display();  
  10.                         Person.swarp(p1, p2);
  11.                         System.out.println("交换后");  
  12.                         p1.display();  
  13.                         p2.display();
  14.                       }  
  15.         }  
  16.   
  17. class Person
  18. {  
  19.     private int age;  
  20.     private String name;      
  21.     public Person(String n,int d)
  22.             {  
  23.             this.name=n;  
  24.             this.age=d;  
  25.         }  
  26.     public static void  swarp(Person m1,Person m2)
  27.             {  
  28.                     Person temp=null;  
  29.             temp=m1;  
  30.             m1=m2;  
  31.             m2=temp;  
  32.         }  
  33.       
  34.     public void display(){  
  35.         System.out.println("name="+this.name+" age="+this.age);  
  36.     }  
  37. }  
复制代码

解释:
  java方法中传递参数时,无论是传递基本数据类型还是引用类型,都是传递参数(显示参数)的一个

拷贝,所以在调用方法结素之后,访问的仍是原来的值
作者: 曹冬明    时间: 2014-4-14 23:12
wangzhaoxu 发表于 2014-4-14 13:07
那么应该是操作的同一对象了,对吧

对啊,如果你学过C或者C++就更容易理解了,那里面清楚的定义了指针和引用




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2