C# string

C#中的预定义数据类型有两大类,一类是值类型,一类是引用类型;其中预定义的引用类型有两个,一个是object,一个是string;

我们知道值类型存储在堆栈中,而引用类型存储在托管堆中。但是 .NET 把string当做值类型处理,我们在创建一个 string 对象时,C#会把字符串存放在堆中,每个 string 对一个字符串的引用会增加该字符串的引用计数,而 string 对象变量本身是该字符串的引用,即并没有新分配空间创建 string。这就导致了和 Java 中的 String 有点相似,对象的变量都是引用,对于变量的等于判断实际上是在比较引用,即比较对象的地址。当然这仅仅是 string 这么做,对于其他的引用类型则会真实的在托管堆中创建一个对象,并把创建对象的引用给对象变量。

以上是C# 和 Java中 string 的相似之处,然而 C++ 的 string 很不一样: C++ 中声明一个对象时实际上是调用了该对象的默认构造函数(如果有的话),即 C++ 中的变量就是真实存在的,C++ 还有引用类型,这和 C#中的引用很相似,另外就是C++中最强大的武器--指针,如果声明一个对象指针,实际上只是在堆栈中创建了一个变量,并没有创建对象,在使用该指针操作对象之前必须用new 构造一个对象,这和 C# 以及 Java 在本质上是一样的。


下面给出一个 C# 中 string 的例子:

using System;

class StringTest
{
	public static void Main()
	{
		string s1 = "hello world";
		string s2 = s1;
		char[] tmp = {'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'};
		string s3 = new string(tmp);
		Console.WriteLine(s1 == s2);
		Console.WriteLine(s1 == s3);
		Console.ReadLine();
	}
}

注意 C# 创建 string 对象用 char*,即字符数组,普通的字符串在C#里面会被存储在托管堆中,即普通的字符串(比如“hello world”)就是 string 对象。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值