理解C#系列 / 核心C# / 数据类型
数据类型
数据类型
C#把数据类型分为两种:值类型和引用类型。
值类型和引用类型
值类型的变量直接指向存储的值,引用类型的变量指向值的引用。[理解:引用就像一个柜子的号码牌,可以顺藤摸瓜找到柜子。假如你再次对一个值类型的变量赋值,那么就会改变值,假如你再次对一个引用类型的变量赋值,那么就只是换了一个号码牌,指向了其他的柜子,对前一个柜子是不做修改的。]
这两种类型的数据存储在内存的不同地方,值类型数据存储在堆栈中,而引用类型的数据(值的引用)存储在托管堆上。
在使用的时候的区别
int i=;
int j=i;
int定义整数类型的变量,整数类型属于值类型,j在赋值的时候复制了i的值,所以这会在内存的两个地方存储值20,如果改变其中一个,不会影响另外一个。
Apple a = new Apple();
a.color = "red";
Apple b = a;
b.color = "green";
Apple是我们定义的苹果类型,我们用new Apple()创造了一个实际的苹果,并用引用类型的变量a指向了这个创造的苹果。
在第二行设定了苹果的颜色是红色。
在第三行我们添加了一个新变量,赋值了a这个引用类型的数据,所以b也是指向了a指向的那个苹果,并没有产生第二个苹果。
在第四行,我们修改b指向的苹果的颜色为绿色,这时候实际上查看a.color也会发现苹果的颜色是绿色了,因为始终就只有一个苹果呀。
Apple a = null;
这表示让一个苹果类型的变量不指向任何实际的苹果,如果你想使用这个变量a代表的实际的苹果,就会报错,因为没有东西呀,怎么能使用呢。值类型的变量就不可以赋值null,这是引用类型的专利。
当已经没有任何一个变量指向某个实例的时候,这个实例就不能被访问到了,CLR的垃圾收集器会定期找寻这样的实例,删除它们,把它们占用的内存返回给操作系统。
预定义数据类型
C#有15个预定义类型,其中13个是值类型,两个是引用类型(string和object)
13个值类型中有8个整型:{分正负的:8位sbyte,16位short,32位int,64位long}{无符号的:8位byte,16位ushort,32位uint,64位ulong}。
13个值类型中有2个浮点类型:{float:32位单精度浮点数}{double:64位双精度浮点数}。
13个值类型中还有:{decimal:通常用于财务计算的128位高精度十进制表示法}{bool:用于包含布尔值true或false}{char:为了保存单个字符的值}。
值类型的赋值方法:
int i = ;
uint ui = 1234U;
long l = 1234L;
long x = 0x12ab;//用16进制赋值需添加0x前缀
ulong ul = 1234UL;
float f = 12.3F
double d = 12.3;
decimal d = 12.30M;
bool b = true;
char c = 'A';
char c = '\n';//转义符
2个预定义的引用类型:{object:根类型,面向对象概念}{string:字符串类型,但拥有许多值类型的特性,使它常被误认为值类型}
理解C#系列 / 核心C# / 数据类型的更多相关文章
- 理解C#系列 / 核心C# / 判断&循环&跳转
判断&循环&跳转 说明 本节写的是C#语言的控制程序流的语句,“控制程序流”就是控制程序运行流程的意思. 判断 很容易理解:如果……就…… if语句:测试特定条件是否满足,如果满足就执 ...
- 理解C#系列 / 核心C# / 常量
常量 常量? 我对常量的理解就是在初始化完成后再也不变的“全局变量”. 定义常量 [const][空格][变量类型][空格][变量名称][=][值][:] const表示定义的是常量. 常量特点 常量 ...
- 理解C#系列 / 核心C# / 编译参数
编译参数 编译控制台应用程序 csc 源文件.cs 编译Windows应用程序 csc /t:winexe 源文件.cs 编译类库应用程序 csc /t:libray 源文件.cs 编译引用类库的应用 ...
- 理解C#系列 / 核心C# / 名称空间
名称空间namespace 名称空间 名称空间用来逻辑分类,而不是物理上的,名称空间与程序集无关[程序集:经由编译器编译得到的文件],同一个程序集中可以有2不同的名称空间,也可以在不同的程序集中定义同 ...
- 理解C#系列 / 核心C# / 枚举
枚举 如果没有枚举 //1代表s号:2代表m号:3代表l号:4代表XL号:5代表XXL号 ; ){ //快递发M号的衣服 } 有了枚举之后 声明枚举(请原谅我使用了中文汉字) public enum ...
- 理解C#系列 / 核心C# / 变量
变量 变量? 变量是对一个东西指定一个名称,变量的功能和人的名字差不多,提到名字就知道指的是什么. 变量类型? 变量类型说明了变量的类型,声明变量是一个整数,还是小数,还是字符,或是图像,或是人类,或 ...
- 深入理解JavaScript系列(10):JavaScript核心(晋级高手必读篇)
本篇是ECMA-262-3 in detail系列的一个概述(本人后续会翻译整理这些文章到本系列(第11-19章).每个章节都有一个更详细的内容链接,你可以继续读一下每个章节对应的详细内容链接进行更深 ...
- 深入理解JavaScript系列(24):JavaScript与DOM(下)
介绍 上一章我们介绍了JavaScript的基本内容和DOM对象的各个方面,包括如何访问node节点.本章我们将讲解如何通过DOM操作元素并且讨论浏览器事件模型. 本文参考:http://net.tu ...
- 深入理解javascript系列(4):立即调用的函数表达式
本文来自汤姆大叔 前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行. 在详细了解这个之前,我们来谈了解一下“自执行”这个叫法,本文对这个功能的叫法 ...
随机推荐
- TP函数
U方法用于完成对URL地址的组装,特点在于可以自动根据当前的URL模式和设置生成对应的URL地址,格式为:U('地址','参数','伪静态','是否跳转','显示域名');在模板中使用U方法而不是固定 ...
- ibatis 分页的简单实现
ibatis 物理分页的简单实现 cheungmine 2013-8-26 使用SSI (Struts2, Spring3, iBATIS2.3)框架开发Web服务的时候有一个需求就是对查询得到的结果 ...
- The sound of silence引发的关于互联网以及教育的利弊思考
“茫茫人海里,人群跟著人群,我们无时无刻不感到孤寂.停下来让我们好好沟通吧,否则人类的关系将日形恶化,沦为新世纪科技的牺牲品” ------- Simon 说实话,我第一次看<毕业生>应该 ...
- Python之美[从菜鸟到高手]--深刻理解原类(metaclass)
本来想自己写这篇文章的,可当我读了这篇文章http://blog.jobbole.com/21351/,我打消了这个念头,因为肯定写的没有人家的好,说的通俗易懂,面面俱到.就厚着面皮修改下格式,测试下 ...
- Centos系统使用vpnc连接cisco的vpn服务
安装vpnc 因为Centos官方源中,所含的软件安装包较少,这里需增加Fedora的源,依次执行: sudo rpm -ivh http://dl.fedoraproject.org/pub/epe ...
- C++ Qt 访问权限总结
总结:C++的访问修饰符的作用是以类为单位,而不是以对象为单位. 通俗的讲,同类的对象间可以“互相访问”对方的数据成员,只不过访问途径不是直接访问. 步骤是:通过一个对象调用其public成员函数,此 ...
- Java 7之集合类型 - 二叉排序树、平衡树、红黑树---转
http://blog.csdn.net/mazhimazh/article/details/19961017 为了理解 TreeMap 的底层实现,必须先介绍排序二叉树和平衡二叉树,然后继续介绍红黑 ...
- Asp.Net处理URL空格变%20问题
在Web前端需要页面跳转的时候我们可能会这样子用:window.location.href = "page.html?parameters",如果刚好parameters里面带有空 ...
- kafka监控之KafkaOffsetMonitor
参考自:http://www.cnblogs.com/sunxucool/p/3904850.html 流行的kafka监控有kafka-web-console.KafkaOffsetMonitor. ...
- Design Mode 之 结构模式
这里我们主要介绍7种结构型模式:适配器模式.装饰模式.代理模式.外观模式.桥接模式.组合模式.享元模式.其中对象的适配器模式是各种模式的起源,我们看下面的图: B1.适配器模式(Adapter) 模式 ...