using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace 堆和栈
{
class Program
{
static void Main(string[] args)
{ #region 引用类型 // s : 对象的引用【存储在栈中】
//new Student() 【对象存储在堆中】
Student s = new Student();//引用类型
s.Age = 88;
Console.WriteLine("初始对象s的Age是:" + s.Age.ToString()); // 输出:88 Student s2 = s;//给引用类型赋值的时候,其实只是赋值了对象的引用【即是在栈中赋值了对象的引用,s和s2的引用地址都指向同一个堆上的地址】
s2.Age = 44;
Console.WriteLine("引用类型赋值后对象s2的Age是:" + s2.Age.ToString());// 输出:44
Console.WriteLine("引用类型赋值后对象s的Age是:" + s.Age.ToString());// 输出:44 #endregion #region 值类型 //局部变量 【存储在栈中】
int aaa = 0;//值类型
Console.WriteLine("初始aaa变量的值是:" + aaa.ToString()); // 输出:0
int aaa2 = aaa;//给值类型变量赋值的时候,是创建了一个副本(即克隆,aaa2 和aaa没一毛钱关系)
aaa2 = 99; Console.WriteLine("值类型赋值后aaa变量的值是:" + aaa.ToString()); // 输出:0
Console.WriteLine("值类型赋值后aaa2变量的值是:" + aaa2.ToString()); // 输出:99 #endregion #region 等值判断 int i = 3;
int j = 3;
Console.WriteLine("值类型等值判断:"+(i == j).ToString());// 输出:true ,值类型等值判断直接比较值本身 Student a = new Student();
a.Age = 3;
Student b = new Student();
b.Age = 3;
Console.WriteLine("引用类型等值判断:"+(a == b).ToString());// 输出:false ,引用类型等值判断的是栈中的地址,不是比较数据的本身 //引用类型变量的赋值操作,复制的是引用,即内存地址,由于赋值后二者都指向同一内存地址,所以改变其中一个,另一个也会跟着改变,二者就像绑定在了一起。
Student c = a;
Console.WriteLine("引用类型等值判断:" + (a == c).ToString());// 输出:true ,引用类型等值判断的是栈中的地址,不是比较数据的本身 #endregion Console.ReadKey(); }
}
}

  

运行结果:

最新文章

  1. WCF 客户端代理生成 通过SvcUtil.exe
  2. Win10下SQLServer2000的安装
  3. Framework manager编写SQL错误整理
  4. iTOP-4412 平台基础软件的安装和学习
  5. operator重载的使用
  6. D3js
  7. 导致Asp.Net站点重启的10个原因 ,记录重启原因
  8. Storm拓扑的并行度(parallelism)介绍
  9. <转>Java的一些历史
  10. 【蓝桥杯】入门训练 Fibonacci数列
  11. Django查询数据库性能优化
  12. Gatling实战(二)
  13. weblogic中配置数据源
  14. 对 JSON 数据进行序列化和反序列化
  15. Python 封装
  16. CH5701 开车旅行
  17. Android 数据分析系列一:sharedPreferences
  18. CoreData 数据库更新,数据迁移
  19. Maven ResourceBundle.getBundle读取Properties异常MissingResourceException: Can't find bundlei解决方法
  20. openssh-server

热门文章

  1. GUI引发的一场脑部大战|wine、wsl、mono、gtk、qt
  2. nRF51822 硬件复位引脚
  3. 关于Java正则和转义中\\和\\\\的理解
  4. Net core学习系列(三)——Net Core中的依赖注入
  5. 迁移Git项目到Gitlab
  6. SQL Server case when 实现分类汇总
  7. Java基础 三目运算符 在嵌套时,使用括号
  8. ISO/IEC 9899:2011 条款6.10.2——源文件包含
  9. URLDoBase64
  10. 【Java】Spring之基于注释的容器配置(四)