string.empty , , null 以及性能的比较
http://www.cnblogs.com/wangshuai901/archive/2012/05/06/2485657.html
1.null
null 关键字是表示不引用任何对象的空引用的文字值。null 是引用类型变量的默认值。那么也只有引用型的变量可以为NULL,如果 int i=null,的话,是不可以的,因为Int是值类型的。
2.,""和String.Empty
这两个都是表示空字符串。只不过""理论上重新开辟内存空间,而String.Empty指向一处已分配好的内存空间。不过优化器会优化的!
判定为空字符串的几种写法,按照性能从高到低的顺序是:
s.Length == 0 优于 s == string.Empty 优于 s == ""
关于String.Empty和Null的问题是这样的,这两个都是表示空字符串,其中有一个重点是string str1= String.Empty和 string str2=null 的区别,这样定义后,str1是一个空字符串,空字符串是一个特殊的字符串,只不过这个字符串的值为空,在内存中是有准确的指向的,string str2=null,这样定义后,只是定义了一个string 类的引用,str2并没有指向任何地方,在使用前如果不实例化的话,都将报错。
二 比较赞同
string.Empty与""存储及性能对比
首先,看一下String类
一、String类[只展示探讨部分]
public sealed class String : IComparable, ICloneable, IConvertible, IComparable<string>, IEnumerable<char>, IEnumerable, IEquatable<string>
{
public static readonly string Empty;
static String()
{
Empty = "";
return;
}
[MethodImpl(MethodImplOptions.InternalCall), SecuritySafeCritical]
public extern String(char[] value);
}
实例化某个string对象,有两大种方式,一个需要new String(),一个不需要new,例如:
<1>调用基本构造函数:
【C#】: string str=new string(new char[]{'a','b','c'});
【IL】: L_0012: newobj instance void [mscorlib]System.String::.ctor(char[])
<2>直接赋值:
【C#】:string str="abc";
【IL】: L_0018: ldstr “abc”
在<1>中,是很平常的实例化方式,而在<2>中生成的IL代码中并没有出现newobj操作符,但出现了ldstr(推送对元数据中存储的字符串的新对象引用)。关于lbstr这种实例化string的方式,是一种驻留机制,即:字符串值相同的只实例化一次(在内存中分配一次空间),其它相同的只是统一指向第一次分配的空间。每次string str="字符串",都会从字符串驻留池中取,如果有,直接使用原来的,没有则创建新的实例。
二、Empty与“”差异分析
public static readonly string Empty;
static String()
{
Empty = "";
return;
}
所以,当第一次实例化string类时,静态构造函数就初始化Empty,且以后直接获取只读Empty值。
例如:
string str=string.Empty;//如果这是第一次使用string类,调用静态构造函数,初始化Empty,在堆中,开辟某一空间,[000001]保存值为“”;
string str2=string.Empty//这是第二次使用,所以直接从内存读取到并赋值,指向原始空值堆空间[00000001]。
而直接赋值 str="";则会:
例如:
string str=“”; //如果是第一次使用string类,(结合上文string类介绍,ldstr)如同普通类,构造函数 string str=new string(char[]{''});在堆中,开辟某一空间,[000001]保存值为“”;
string str2=""; //这是第二次使用,(结合上文string类介绍,ldstr).NET对string有驻留机制处理,即相同的字符串值,则会继续使用原来堆中的值数据,
//当然,这个过程必然会经过一系列的处理,消耗一定的性能!!!
三、分析总结
<1>在内存分配上:
string.Empty与“”,没有差别。都是一个系统上,""值对象只有一个!!!
<2>在性能上:
string.Empty高,不需要在驻留机制上做处理。
转载于:https://www.cnblogs.com/min-min-min/p/6251512.html
string.empty , , null 以及性能的比较相关推荐
- String.Empty,NULL和的区别
string.Empty不分配存储空间 ""分配一个长度为空的存储空间 所以一般用string.Empty 为了以后跨平台,还是用string.emp ...
- String.Empty和的区别
1.共同点 Empty是string类中的一个静态的只读字段,他的定义 public static readonly String Empty = ""; string.Empty ...
- NULL,,String.Empty三者在C#中的区别
(1)NULL null 关键字是表示不引用任何对象的空引用的文字值.null 是引用类型变量的默认值.那么也只有引用型的变量可以为NULL,如果int i=null,的话,是不可以的,因为Int是值 ...
- C#中的DBNull、Null、String.Empty和“”
null可赋值任何变量,将变量置为空 DBNull只用于DataRow对象,表示数据库中的空值 String.Empty是0长度字串 Convert.IsDBNull判断是否为DBNull DB ...
- string.Empty和null三者的区别
本文来讨论"",string.Empty和null三者到底有什么区别 这是一个及其常见的问题,网上已经有关于这个问题的很多讨论.但是我觉得都是不求甚解,有一些还是在误导别人.下面我 ...
- ,string.Empty和null三者的区别
这是一个及其常见的问题,网上已经有关于这个问题的很多讨论.但是我觉得都是不求甚解,有一些还是在误导别人.下面我来说下我对这三者的理解,如有错误的地方请大家及时指正. 一:""与st ...
- C#中的DBNull、Null、和String.Empty解释
1.对DBNull的解释: 该类用于指示不存在某个已知值(通常在数据库应用程序中). 在数据库应用程序中,空对象是字段的有效值.该类区分空值(空对象)和未初始化值(DBNull.Val ...
- C#中NULL,,DBNULL,String.Empty,Convert.IsDBNull()的区别
C#中的空值的判断较麻烦,不象在VB6中那么简单,这些各种空值的判断和理解对不熟悉的人来说,可能很麻烦,现就我在使用过程中的一点体会和大家共同分享. (1)NULL null 关键字是表示不引用任何对 ...
- String为null
String类的下面特性需要注意: 1.null情况 String str1 = null; String str2 = null; String str3 = str1+str2; System.o ...
最新文章
- Java 包装类 自动装箱和拆箱
- Spring Boot Cache之缓存
- 【服务器】创建docker、运行jupyter相关命令
- ElasticSearch 插件开发
- 《疯狂Java讲义》(七)---- 方法
- c 语言基础笔试题1
- C# 中文简体中文繁体转换_ChineseConverter
- eclipse下载速度过慢的解决方法
- Disparity Map
- 【重识云原生】第六章容器基础6.4.10.3节——StatefulSet实操案例-部署WordPress 和 MySQL
- 使用LabVIEW进行物体追踪图像处理分析
- Word 一件删除所有空格
- EasyX的安装与使用
- iOS 获取手机IP 地址
- php 网址尾部带斜杠和不带区别,网址中带斜杠和不带斜杠的区别
- 计算数据集的均值、方差
- 第六章 电磁新理论(修补章)
- java8 .map是什么意思_JDK8 stream().map() 作用
- 计算机视觉——bbox的格式简介
- 4核8g mysql 配置_Mysql配置文件 4c8g优化
热门文章
- 的主机名_如何在Mac 上更改电脑的名称或本地局域网主机名?
- centos7下docker启动失败解决
- php密码安全检测,php – 密码安全随机字符串函数
- freertos内核 任务定义与切换 原理分析
- oracle 修改2个表,oracle学习笔记2:创建修改表
- 基于Java+SpringBoot+vue+node.js的图书购物商城系统详细设计和实现
- linux 下i2c读写命令,S3C2440 Linux下的I2C驱动以及I2C体系下对EEPROM进行读写操作
- oracle10g支持数据泵么,Oracle 10g使用数据泵(EXPDP和IMPDP)。
- 济源一中2021高考成绩查询入口,济源一中2019高考成绩喜报、一本二本上线人数情况...
- Java 输出当前目录