首页 > 其他分享 >String类型 在底层剖析

String类型 在底层剖析

时间:2022-11-29 20:40:22浏览次数:37  
标签:1234 Console String 剖析 WriteLine 底层 public string


一、String在任何语言中,都有它的特殊性,在.NET中也是如此。它属于基本数据类型,也是基本数据类型中唯一的引用类型。字符串可以声明为常量,但是它却放在了堆中。 在.NET中String是不可改变对象,一旦创建了一个String对象并为它赋值,它就不可能再改变,也就是你不可能改变一个字符串的值。

using System;

namespace Demo1
{
///<summary>
/// String连接测试
/// </summary>
public class Test
{
public static void Main(string[] args)
{
string a = "1234";
Console.WriteLine(a);
a += "5678";
Console.WriteLine(a);
Console.ReadLine();
}

}
}

运行的结果:  1234     12345678    

看起来我们似乎已经把MyStr的值从“1234”改为了“12345678”。事实是这样的吗?

实际上并没有改变。在string a = "1234";代码中创建了一个String对象它的值是“1234”,MyStr指向了它在内存中的地址;

第a += "5678";代码中创建了一个新的String对象它的值是“12345678”,MyStr指向了新的内存地址。

这时在堆中其实存在着两个字符串对象,尽管我们只引用了它们中的一个,但是字符串“1234”仍然在内存中驻留。

二、引用类型  

using System;

namespace Demo2

{
/// <summary>
/// String引用类型测试
/// </summary>
public class Test
{
public static void Main(string[] args)
{
string a = "1234";
Console.WriteLine(a);
Test.Change(ref a);
Console.WriteLine(a);
Console.ReadLine();
}

public static void Change(ref string s)
{
s = "5678";
}
}
}

运行结果:  1234   5678 



标签:1234,Console,String,剖析,WriteLine,底层,public,string
From: https://blog.51cto.com/u_6871414/5896959

相关文章