c#中对于参数的传递,有二种处理方式,默认情况下:值类型的参数,按值传递(即:方法体内的参数是原值的副本);引用类型的参数,"加ref关键字后“,按引用传递(即:方法体内的参数,是对象的指针引用,在方法体内修改了对象的属性,方法调用完成后,这种变化也会保持下去).

java虽然也是OO语言,但是这一点有很大不同,不管是“值”类型的简单参数(比如:int),还是“引用”类型的对象参数(比如:Object),参数永远是按值传递(参数永远是原值的副本)。只不过,对于int型的简单参数,比如:5,副本也是5,相当于在内存又开辟一块空间,存储5这个值,但这二个5完全不相关联。而对于对象参数(比如:Object),参数副本应理解成对象指针引用“地址值”的副本,比如:原Object对象在内存中的指针地址为OX0001,则参数为OX0001的另一个副本,因为这二个地址值相同,所以在大多数情况下,方法体内,通过指针地址定位到的对象是同一个,即:方法体内修改对象的属性,该对象就被永远修改了,即使方法调用完成,这种修改的结果也会永远保存下去。这给很多java初学者造成java中参数有按引用传递的错觉

 

看下面的示例:

先定义一个测试用的Person类

 1 package com.cnblogs.yjmyzz.test;
 2 
 3 public class Person {
 4     
 5     public Person(){}
 6 
 7     private String name;
 8 
 9     public String getName() {
10         return name;
11     }
12 
13     public void setName(String name) {
14         this.name = name;
15     }
16 
17     public String toString() {
18         return "name:" + name;
19     }
20 
21 }
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-09-07
  • 2022-12-23
  • 2022-12-23
  • 2021-11-02
  • 2022-02-09
  • 2022-12-23
猜你喜欢
  • 2022-01-01
  • 2021-06-25
  • 2021-07-02
  • 2022-12-23
  • 2021-05-19
  • 2022-01-16
  • 2021-12-04
相关资源
相似解决方案