以下个人观点仅代表目前个人理解,也许有理解不到的地方,仅记录作为日后参考。

看到这样一个例子来说明是值传递而不是引用传递

java中对象的传递是值传递还是引用传递?

java中对象的传递是值传递还是引用传递?

java中对象的传递是值传递还是引用传递?

 个人观点:简述一下一个概念

Student s1=new Student();

对于这个语句来说s1是对象的一个引用,具体创建对象的过程是new Student()这个来完成的,所以这条语句应该是分两步完成的,

1.Student s1=null 

2.s1=new Student();

对象是一个看不见摸不着的堆上的一块内存区域,这块区域存放对象方法和属性。

 

1.所以上述图中可以理解为s1和s2是指向Student的两个对象的两个引用,x和y是对引用s1和s2两个引用的一个拷贝,这里才成为s1,s2到x和y是一个引用传递。

2.x和y的值表示的是Student的两个对象的内存区域,也就是内存地址。当s1拷贝给x,y拷贝给s2时,只是把x和y的值赋值给了s1和s2。也就是s1指向的值和x指向的值是一样的,也就是s2指向的值和y指向的值是一样的,所以当x和y发生了交换,只是两个引用指向的值发生了变化,真正的值(对象)并没有发生变化,所以不会对s1和s2指向的值有影响,s1和s2输出的对象属性值就还是之前指向对象的属性值,但是如果通过x和y引用去修改对象的属性或者交换后的x和y去修改对象的属性,那么就会影响之前s1和s2对象的属性值,所以本质对象的传递还是对象地址的传递,而s1和s2,x和y都是对象的引用,所以属于引用值(地址)的一个赋值。

      so感觉两种解释都有道理,表面是对象引用变量的一个传递,也就是把对象的引用变量传给另一个引用变量,属于引用传递。     但实质从一个引用变量给另一个引用赋值的过程,也是指向值(对象地址)的赋值,也属于值传递。

 

 

 

相关文章: