字符串的不可变性
//创建一个string类型的对象
//因为是引用类型,所以会在堆中开辟一个空间,用来存储内容“123”,他的地址为p1
//并且在栈中开辟一个空间,名称为str1,他存储的内容为p1
//string str1 = "123";
//当再次重新赋值为“456”,的时候
//原先堆中存放“123”的空间不变,会重新开辟一段新的空间用来存储“456”,这个新空间的地址为p2
//然后栈中的空间str1存储的内容变为新空间的地址p2
//堆中的空间p1会在之后被垃圾回收机制给释放掉
//因为每次重新赋值都会重新开辟空间,所以如果重复大量的赋值会占用大量的内存
//str1 = "456";
字符串的暂存池特性
//如下面两个string对象
//在即使窗口个中可以看到,栈中的地址不同,但是堆中的地址是相同的
//在创建对象s1的时候会先在堆里检测,如果有123,则直接指向该空间,如果没有则重新开辟一个空间
//string s1 = "123";
//string s2 = "123";
字符串可以看做一个只读的字符数组,通过下标可以去到其中的字符
//string s = "abcde";
//char c = s[1];//取到b这个字符
//s[2] = 'a';//应为是只读的,所以如果想要通过这种方式赋值会报错
字符串和字符数组之间的转换
//string s = "abcdefg";
//char[] chs = s.ToCharArray();//转换成字符数组
//s = new string(chs);//把字符数组转换成字符串重新赋值给对象s
使用方法IsNullOrEmpty判断是否为空或者为null
//string s = null;
//if (string.IsNullOrEmpty(s))
//{
// Console.WriteLine("空");
//}
//else
//{
// Console.WriteLine("不空");
//}
Equals判断两个字符串是否相同
//Equals默认判断的是两个对象的地址,如果地址相同则返回true,如果不相同则返回false
//string s1 = "abc";
//string s2 = "aBC";
//不忽略大小写的判断
//if (s1.Equals(s2,))
//忽略大小写
//if (s1.Equals(s2,StringComparison.OrdinalIgnoreCase))
//{
// Console.WriteLine("相同");
//}
//else
//{
// Console.WriteLine("不同");
//}
//Console.ReadKey();
使用IndexOf获取某个字符串出现的位置,返回的为对应的下标
//string s = "我爱北京爱天安门";
//int index = s.IndexOf("爱");//判断[爱]出现的第一个位置
//int index2 = s.IndexOf("爱", 2);//从下标为2的字符开始判断[爱]出现的位置
//int index3 = s.LastIndexOf("老");//判断[老]最后一次出现的位置
使用Substring方法截取字符串,返回结果为一个新的字符串
//string s = "abcdefg";
//s = s.Substring(1,4);//从下标为1的开始截取,截取4个字符,返回结果为[bcde]
使用split方法,把字符串能转换成数组
//string s = "a , -- b";
//string[] newS = s.Split(new char[] { ' ', '-', ',' });//转换成数组,并且把符合调价的字符,转换成空
//string[] newS = s.Split(new char[] { ' ', '-', ',' }, StringSplitOptions.RemoveEmptyEntries);//把转换的空给去掉
把指定的字符插入到一个数组之间,并且返回一个组装的字符串
//string[] names = { "张三", "李四", "王五", "赵六" };
//string s = string.Join("|",names);//转换之后返回结果为[张三|李四|王五|赵六]
//string s = string.Join("|",1,3.14,true,'c',5000m,"张三");//可以把任何类型的数据放进去,这里比较随意
//把所有的[--]替换成一个[-],输出结果为[1-2-3-4]
//string s = "1-----------2---------3-----------4--";
//string[] strNew = s.Split(new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries);
//s = string.Join("-", strNew);
public class Person
{
public string Name
{
get;
set;
}
public int Age
{
get;
set;
}
/// <summary>
/// 重写Equals方法,
/// 用来比较Name与Age是否相同
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public override bool Equals(object obj)
{
Person p = obj as Person;
if (this.Name == p.Name && this.Age == p.Age)
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// 重写ToString方法
/// 输出哈哈哈
/// </summary>
/// <returns></returns>
public override string ToString()
{
return "哈哈哈哈";
}
}