前言:
目前我们对“java中引用类型在赋值时复制的是对象实体”大体比较关心,我们都需要知道一些“java中引用类型在赋值时复制的是对象实体”的相关资讯。那么小编同时在网摘上搜集了一些有关“java中引用类型在赋值时复制的是对象实体””的相关知识,希望看官们能喜欢,咱们快快来学习一下吧!C#中的数据类型分为两种:值类型和引用类型
1、值类型包含:byte、sbyte、char、short、ushort、int、uint、long、ulong、decimal、float、double、bool、enum、struct
2、基于值类型的变量直接包含值。将一个值类型的变量赋值给另一个值类型,将赋值包含的值。这与引用类型变量的赋值不同,引用类型
变量的复制只复制对变量的引用,而不复制对象本身。所有的值类型均隐性派生自System.ValueType。
3、值类型存储在堆栈(stack)中,如:int a = 10 在堆栈中存储了a的值10。
引用类型的变量在声明后保存在堆栈(stack)中,在堆栈中固定占用4个字节,用于存放对象的地址。在使用new关键字创建对象后,由
.Net在内存堆(heap)中为其分配相应的内存空间,并将该对象的首地址存储在应用类型的变量中。例如:ClassOne one = new ClassOne()
.Net在内存堆(heap)中为one分配了相应的物理内存,假如其首地址为1000,则在堆栈(stack)中变量one存储的one的首地址1000
4、与引用类型不同,值类型不可派生出新的类型。但与引用类型相同的是结构也可以实现接口。值类型不可包含Null值,然而可空类型功能允许将null赋给值类型
5、例:
int a = 10
int b = a
ClassOne one = new ClassOne()
ClassTwo two = one
则在堆栈中为变量b分配4个字节的空间,并且将变量a的值10复制给变量b,此时变量a和变量b中各保留10的一个备份,对a的修改不会影响b,同样修改b的值也不会影响a。
然后在堆栈中为two分配4个字节的空间,并且将变量one的值复制给two,由于one中存储的是one对象的首地址1000,因此复制后two中保存的也是one对象的首
地址1000,因此,此时one和two变量都保存了同一个对象的首地址,即他们两个指向同一个对象。