class Program
{
static void Main(string[] args)
{
Student stu = new Student { Name = "老王" };
test(ref stu);
Console.WriteLine(stu.Name);
Console.Read();
} static void test(Student stu)
{
stu = new Student { Name="刘哥" };
Console.WriteLine(stu.Name);
} static void test(ref Student stu)
{
stu = new Student { Name = "刘哥" };
Console.WriteLine(stu.Name);
}
} public class Student
{
public string Name { get; set; }
}

不加ref 和加了ref 很明显结果是不一样的

如何理解加了和不加的区别

首先要知道构造一个对象的时候,内存中堆栈的分配情况,stu这个变量在栈中,而对象在堆中,变量中存放的是堆的地址。

因此如果不加ref,参数就是一个副本,存放的是堆中的地址。如果我们不改变地址,(也就是我们不去new一个对象对这个副本指向新的堆地址),其实是没有区别的,为什么?因为无论怎么操作,始终改变的是堆中的对象,如果我们new了一个新的对象,那么这个副本的地址发生变化了,但是stu这个变量指向的地址呢?依然没有发生变化。

因此如果加了ref呢?传递的是什么呢,是stu本身,并不是stu的副本,所以如果为stu重新new一个对象,那么它指向的地址自然就改变了。

最新文章

  1. Android 源码下载方法(Git 方式clone)
  2. Ant 常用语法及选项
  3. ContentProvider要点复习
  4. webpack入坑之旅(三)webpack.config入门
  5. SCREAM:Error suppression ignored for
  6. [ Iptables ] Linux开启防火墙,切记仔细确定每个端口
  7. 类库探源——System.String
  8. [布局] bootstrap基本标签总结
  9. UnSupported Encoding错误
  10. Properties文件及与之相关的System.getProperties操作(转)
  11. 详解Grunt插件之LiveReload实现页面自动刷新(两种方案)
  12. JAVA基础第六组(5道题)
  13. unity3D写一个hello world
  14. python_猜年龄
  15. 跟着小菜学习RabbitMQ启动和基础(系列一)
  16. ASP.NET MVC ETag & Cache等优化方法
  17. 一篇文章搞定SpringMVC参数绑定
  18. python中闭包的理解
  19. PHP中如何给日期加上一个月/天
  20. JSTL 之 <c:out>

热门文章

  1. Java 通过JDBC连接Mysql数据库的方法和实例【图文说明】
  2. RtlWerpReportException failed with status code :-1073741823
  3. mac中的echo颜色输出
  4. The CHECK_POLICY and CHECK_EXPIRATION options cannot be turned OFF when MUST_CHANGE is ON. (Microsoft SQL Server,错误: 15128)
  5. JAX-RS介绍——Java API forRESTful WebServices,JAX-RS的目标是Web Services开发(这与HTML Web应用不同)而Spring MVC的目标则是Web应用开发
  6. Spring_总结_02_依赖注入
  7. hdoj-1046-Gridland(规律题)
  8. 浅学soap--------3
  9. mysql出现mysql server has gone away错误的解决办法
  10. leetcode_sql_2,183