C#中 值类型 与 引用类型 的区别

值类型和引用类型是编程中经常提到的两个概念,它们主要用于描述变量在内存中的存储方式和传递方式的不同。

值类型(Value Type)是指变量直接存储其值的实际数据,这意味着当一个值类型的变量被赋值给另一个变量时,实际上是将该值复制到了新的变量中。常见的值类型包括整数、浮点数、字符和布尔值等。

例如,在一个整数变量a初始化为10后,如果将该变量赋值给另一个变量b,那么b将拥有一个新的独立的值,并不会影响到a。

int a = 10;
int b = a;

a = 20;

Console.WriteLine(a); // 输出: 20
Console.WriteLine(b); // 输出: 10

引用类型(Reference Type)是指变量存储的是数据的内存地址,而不是实际的数据本身。当一个引用类型的变量被赋值给另一个变量时,实际上是将该内存地址复制到新的变量中,两个变量将引用相同的数据。

例如,如果有一个字符串变量str1赋值为"Hello",然后将其赋值给另一个字符串变量str2,那么str2将引用和str1相同的字符串对象,修改其中一个变量的值将影响到另一个变量。

string str1 = "Hello";
string str2 = str1;

str1 = "World";

Console.WriteLine(str1); // 输出: World
Console.WriteLine(str2); // 输出: Hello

但是这里str2输出的为什么不是world呢?

需要注意的是,尽管引用类型变量实际上存储的是内存地址,但是在进行赋值操作时,仍然是复制了一份内存地址。因此,修改其中一个变量指向的对象时,另一个变量不会受到影响。只有在修改对象的属性或元素时,原始对象和引用副本才会同时改变。

当引用类型变量存储的是一个对象时,如果通过一个变量修改了该对象的成员属性或元素,那么其他引用该对象的变量也会反映出这些变化。这是因为这些变量都指向同一个对象。

例如,考虑以下的代码:

class Person
{
    public string Name { get; set; }
}

Person person1 = new Person();
person1.Name = "Alice";

Person person2 = person1;
person2.Name = "Bob";

Console.WriteLine(person1.Name); // 输出: Bob
Console.WriteLine(person2.Name); // 输出: Bob

在上述代码中,我们创建了一个名为person1的Person对象,并将其Name属性设置为"Alice"。然后,将person1赋值给另一个变量person2。当我们修改person2的Name属性为"Bob"时,person1引用的对象的属性也会被修改。因此,输出结果为"Bob"。

这是因为person1和person2引用的是同一个Person对象。通过其中一个引用修改对象的属性,另一个引用也会看到这个变化。这种行为在引用类型中很常见,但在值类型中是不会发生的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值