C# string
来源:互联网 发布:中英文阅读软件 编辑:程序博客网 时间:2024/05/17 21:42
string
C#有string关键字,在翻译成.NET类时,它就是System.String.有了它,像字符串连接和字符串复制这样的操作就简单了.
1. string 是引用类型还是值类型
引用类型操作
当使用重载操作符”=”给string对象赋值时,string的对象是引用类型,它保留在堆上,而不是堆栈上.因此,当把一个字符串赋给另一个字符串时,会得到对内存中同一个字符串的两个引用.例如,修改其中一个字符串,就会创建一个全新的string对象(注意,这个过程发生在”=”中),而另一个字符串没有改变.考虑下面的代码:
publicclass MyClass
{
publicstaticvoid Main()
{
string str1 = "I am a number";
string str2 = str1;
Console.WriteLine("str1 ="+str1);
Console.WriteLine("str2 ="+str2);
str1 = "I am another number";
Console.WriteLine("after str1 changed... str1 ="+str1);
Console.WriteLine("after str1 changed... str2 ="+str2);
Console.ReadLine();
}
}
Output :
str1 = I am a number
str2 = I am a number
after str1 changed...str1 = I am another number
after str1 changed...str2 = I am a number
具有值类型特征的操作
string有两种情况下的操作是具有值类型特征的:
1) 在函数中传递string(比如函数参数是string型)时,传递的是地址,但却不能修改成员变量,原因是它重新又创建了一个全新的对象,和它想修改的那个成员变量非同一地址,所以看上去像是值类型;
2) str1 == str2 ,仅仅是比较了值,而非地址(是MS重写了==运算符所致).
总结:
string 到底是引用类型还是值类型 答:引用类型 . 只不过它在某此操作上会表现出值类型的特征.
string类型的另外一个特殊性在于它是“不会变”的,每次操作string,都相当于新建了一个string对象.
2. ”@”在string中的用法
都知道如果要使用转义字符的话,需要在字符前加上”/”,而C#提供了一种新的机制,使用”@”.在”@”后的字符串都看作是原意,不会解释为转义字符串.并且以”@”开头的字符串支持回车换行的显示方式(见下例).不过会增加到字符串长度,不推荐过多使用.
publicclass MyClass
{
publicstaticvoid Main()
{
string str1 = @"HelloWorld!";
string str2 = @"line1: Hello
line2: World!";
Console.WriteLine("str1 length ="+str1.Length);
Console.WriteLine("str2 length ="+str2.Length);
Console.ReadLine();
}
}
Output :
str1 length = 11
str2 length = 34
3. String 和 string的区别:
String是CLR(运行时库)的类型名字,而string是C#中的关键字.其实C#在编译时,会增加代码(下面列出的),将string转换成System.String.
using string = System.String;
using sbyte = System.SByte;
using byte = System.Byte;
using short = System.Int16;
using ushort = System.UInt16;
using int = System.Int32;
using uint = System.UInt32;
4. ”@”的其它用法
在 C# 规范中, ”@”可以作为标识符(类名、变量名、方法名等)的第一个字符,以允许C# 中保留关键字作为自己定义的标识符.
publicclass MyClass
{
publicstaticvoid Main()
{
@class c = new @class();
c.@static();
Console.ReadLine();
}
publicclass @class
{
privateint @bool;
publicvoid @static()
{
Console.WriteLine("I've been staticed...and @bool is"+this.@bool);
}
public @class()
{
this.@bool =999;
}
}
}
5. 等于null 和 等于””的区别
string = null; //不分配内存
string = “”; //分配字节为0的内存- c# string
- C# string
- C# String
- C# string
- C# string
- c# STRING
- c# String 和string
- C# string vs String
- C# MD5 加密 string->string
- C#中String与string
- c#中的string类型
- String Formatting in C#
- C# string 中的 @
- C# String.Format 方法
- C# String小技巧
- String in C#
- String Formatting in C#
- C# String小技巧
- 使用 Bootchart 分析 Linux 启动过程
- javaMail 邮件发送的错误总结
- DataReader 程序性能优化
- jQuery AJAX调用WCF服务
- android 中如何获取camera当前状态
- C# string
- 分享 MSDN 下载工具(Word/PDF)
- tab页 弹出子页面后关闭父页面
- Amazon、Google、IBM、Microsoft云计算
- 安装oracle10g数据库出现错误oui-25031一些configuration assistant失败
- AS3 抽象类与接口
- 为什么linux kernel默认的页面大小是4K,而不是4M或8M?
- 五大流行VirtueMart模板
- 七大积极情感