第一部分:int类型的介绍:
//定义一个int类型变量
int num=1;
对于上述式子,int类型就是System.Int32的别名,而Int32为结构类型,具体的定义如下(只取了部分内容)
namespace System
{
public struct Int32 : IComparable, IFormattable, IConvertible, IComparable<int>, IEquatable<int>
{
public const int MaxValue = 2147483647;
public const int MinValue = -2147483648;
public int CompareTo(int value);
public bool Equals(int obj);
public override int GetHashCode();
public static int Parse(string s);
public override string ToString();
public static bool TryParse(string s, out int result);
}
}
一,可见,int为System命名空间下的一个结构类型,它含有一些静态成员与非静态成员,对于静态成员可通过结构名.静态成员名直接调用(比如:int.Parse(s))
对于非静态成员通过结构的变量名.非静态成员名(比如:int num=1;num.ToString())。
二,Int32结构表示 32 位有符号的整数。即Int32 值类型表示值介于 -2,147,483,648 到 +2,147,483,647 之间的有符号整数。
三,int所占字节数:个人始终对int占多少个字节不清楚 , 网上没有很清晰的答案,有人说跟系统有关,有说跟编译器有关,有说跟cpu有关......
目前我理解的是 在32位计算机下,C#程序中,int 占4个字节,即32位,通过sizeof(int)观察可得4字节,不再深究,以后再说~
第二部分:int类型的初始化过程
首先请记住:在 C# 中不允许使用未初始化的变量。(在使用 C# 中的局部变量之前,必须对其进行初始化。)(可以理解为不允许使用没有被分配内存空间的变量)详见:http://msdn.microsoft.com/zh-cn/library/vstudio/83fhsxwc.aspx
//int类型初始化方法一
int a=new int();//在栈中开辟了内存空间,调用构造函数进行初始化a,则a的初始值为0
int b=a; //a可以直接拿来操作,因为a已经被赋值(即a已经初始化(初始化就是赋值,声明只是声明一个变量名称)了),b的值为0
上面的式子显示了由默认构造函数返回的值类型的默认值,默认构造函数是通过 new 运算符来调用的,即调用了Int32结构的默认无参构造函数(构造函数系统没写出来,但确实是存在的,每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值(详见:http://msdn.microsoft.com/zh-cn/library/vstudio/s1ax56ch.aspx)。 具体如何赋值还待研究...),将a的值赋值为0。
//int类型初始化方法二
int a=0;//当然这个a肯定可以直接拿来用,这种方法与方法一效果相同,a的初始值为0。
//int类型初始化方法三
int a;//(此时到底有没有在栈中开辟内存空间?)编译时a的初始值为0..但是却不能将a直接拿来操作,因为a其实没有初始化,详见http://msdn.microsoft.com/zh-cn/library/vstudio/s1ax56ch.aspx(看上去就没有初始化,因为你没给它赋任何值啊)--这里就涉及编译时与运行时的概念--还待了解..
a=0;//此时a肯定在栈中开辟了内存空间,并赋初值为0。
//int类型初始化方法四
int a; //与方法三等效
a=new int();//其实等效于a=0;