C#实用小知识:string和判断null
-
string
string是常用的类型,它具有不可变性:就是一旦赋值,就不可变,如果再赋值 ,就重新开辟内存空间;保留性:如果一个字符串存在,另一个与其相同,他们会指向同一个地址,不会再开辟新内存空间;
下面的Demo作个证明:
public unsafe void Run()
{
string a = "abcd";
string b = "abcd";
fixed (char* p = a)
{
Console.WriteLine("原a字符串地址= 0x{0:x}", (int)p);
}
fixed (char* p = b)
{
Console.WriteLine("原b字符串地址= 0x{0:x}", (int)p);
}
b = b+"efg";
fixed (char* p = b)
{
Console.WriteLine("新b字符串地址= 0x{0:x}", (int)p);
}
}
结果
string还提供了一些其他方法:
string.Empty,和""是一样的;
string.IsNullOrEmpty(string)判断一个字符串==null或==""返回true
string.IsNullOrWhiteSpace(string) 判断一个字符串==null或==""或==" "返回true
-
判断Null
如果有这样一段代码:
var appOrder = new AppOrder();
if (appOrder == null)
{
WriteLine("appOrder == null:appOrder is null");
}
你觉结果会输出吗?
常理是不会输出appOrder == null:appOrder is null但真正的结果是还真不一定,这里不能被new AppOrder欺骗了,因为还要看AppOrder对==的理解是什么。
如果代码是这么写:
class NullDemo : Demo
{
public void Run()
{
var appOrder = new AppOrder();
if (appOrder == null)
{
WriteLine("appOrder == null:appOrder is null");
}
}
}
class Order
{
public static bool operator ==(Order left, Order right)
{
return true;
}
public static bool operator !=(Order left, Order right)
{
return true;
}
}
class AppOrder : Order
{
}
appOrder == null:appOrder is null还真能输出,因为==被赋予了永恒相等,看起来判断为null用==不靠谱,那用什么呢?
if (appOrder is null)
{
WriteLine("appOrder is null:appOrder is null");
}
想要更快更方便的了解相关知识,可以关注微信公众号
![](https://img2022.cnblogs.com/blog/14888/202202/14888-20220204092648617-346508086.png)
****欢迎关注我的asp.net core系统课程****
《asp.net core精要讲解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core项目实战》 https://ke.qq.com/course/291868
《基于.net core微服务》 https://ke.qq.com/course/299524
《asp.net core精要讲解》 https://ke.qq.com/course/265696
《asp.net core 3.0》 https://ke.qq.com/course/437517
《asp.net core项目实战》 https://ke.qq.com/course/291868
《基于.net core微服务》 https://ke.qq.com/course/299524