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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql查询当前库的实例名_oracle查询数据库名、实例名等

oracle中&#xff1a;1、查询数据库名&#xff1a;select name,dbid from v$database;或者show parameter db_name;2、查询实例名&#xff1a;select instance_name from v$instance;或者show parameter instance_name;3、查询数据库域名&#xff1a;select value from v$param…

JPA 系列教程21-JPA2.0-@MapKeyColumn

MapKeyColumn 用JoinColumn注解和MapKeyColumn处理一对多关系 ddl语句 CREATE TABLE t_employee (id bigint(20) NOT NULL AUTO_INCREMENT,name varchar(255) DEFAULT NULL,PRIMARY KEY (id) ) ENGINEInnoDB AUTO_INCREMENT2 DEFAULT CHARSETutf8;CREATE TABLE t_employee_map…

错误:在keystone中无法找到默认角色user_Kubernetes RBAC角色权限控制

摘选:https://i4t.com/4448.html在Kubernetes中所有的API对象都保存在ETCD里&#xff0c;可是&#xff0c;对这些API对象的操作&#xff0c;却一定是通过访问kube-apiserver实现的。我们需要APIServer来帮助我们授权工作&#xff0c;而在Kubernetes项目中&#xff0c;负责完成授…

JAVAWEB项目如何实现验证码

验证码基础 一.什么是验证码及它的作用 &#xff1a;验证码为全自动区分计算机和人类的图灵测试的缩写,是一种区分用户是计算机的公共全自动程序,这个问题可以由计算机生成并评判,但是必须只有人类才能解答.可以防止恶意破解密码、刷票、论坛灌水、有效防止某个黑客对某一个特定…

在线判题系统(oj)效果分析图_在线代码编写平台开发分享

计算机专业的大学生应该都了解acm比赛&#xff0c;这种通过使用oj(online judge)系统在线编程刷题&#xff0c;实时反馈学习排名的方式能很大程度激发学生的学习热情。oj学习排名界面oj个人学习记录界面只是oj平台一般都只适用后端语言&#xff0c;如java&#xff0c;c#, c,C&a…

BZOJ1298:[SCOI2009]骰子的学问

Description Input 第一行为两个整数n, m。第二行有n个整数&#xff0c;为a1&#xff0c;a2, …, an。 Output 包含n行&#xff0c;每行m个1~nm的正整数&#xff0c;各不相同&#xff0c;以空格分开。如果有多解&#xff0c;输出任意一组解&#xff1b;如果无解&#xff0c;输出…

mysql交叉连接后生成的记录总数_4.mysql数据库创建,表创建模等模板脚本,mysql_SQL99标准的连接查询(内连接,外连接,满外连接,交叉连接)_MySQL...

--用root用户登录系统&#xff0c;执行脚本--创建数据库create database mydb61 character set utf8 ;--选择数据库use mydb61;--增加 dbuser1用户--创建用户‘dbuser61’密码为‘dbuser61’拥有操作数据库mydb61的所有权限GRANT ALL ON mydb61.* TO dbuser61 IDENTIFIED BY &q…

IIS网站或系统验证码不显示问题——使用了托管的处理程序,但是未安装或未完整安装 ASP.NET...

在IIS上发布了一个系统&#xff0c;但是登陆页面的验证码图片一直出不来&#xff0c;尝试了各种办法&#xff0c;权限、路径、继承父类路径等都不管用&#xff0c;进入Login.html,对着无验证码图片的图标&#xff0c;右键复制图片的网址&#xff0c;粘贴到地址栏&#xff0c;出…

mysql索引有字符集_07. 类型、字符集、引擎和索引

字符集是什么&#xff1f;为了更好的识别中文、日文、英文、希腊语。对于常用的符号进行了编码&#xff0c;这个编码就是字符集。字符集确定了文字的存储方式。字符集相当于是计算机中人类的语言。举个例子&#xff1a;我说的是英文&#xff0c;所以我存储的时候要用英文文字来…

oracle--第一天PLSQL--bai

第一天&#xff1a; -- 创建book表 create table book ( bid number primary key, bname varchar2(20) not null, price number(10,2) not null ) -- 插入数据 insert into book(bid,bname,price)values(20,西游记,170.5); insert into book(bid,bname,price)values(12,红楼梦,…

mysql性能优化的8个方法_关键的十个MySQL性能优化技巧

与所有的关系型数据库一样&#xff0c;Mysql仿佛是一头让人难以琢磨的怪兽。它会随时停摆&#xff0c;让应用限于停滞&#xff0c;或者让你的业务处于危险之中。事实上&#xff0c;许多最常见的错误都隐藏在MySQL性能问题的背后。为了确保你的MySQL服务器能够一直处于全速运行的…

修改自己的centos输入法

当自己的centos连上网时&#xff0c;就可以修改自己的输入法了 http://jingyan.baidu.com/album/da1091fb3e7f8a027849d681.html?picindex2 转载于:https://www.cnblogs.com/xiaoyoucai/p/6262054.html

new float查询长度 c++_C/C++经典面试题

面试题 1&#xff1a;变量的声明和定义有什么区别 为变量分配地址和存储空间的称为定义&#xff0c;不分配地址的称为声明。一个变量可以在多个地方声明&#xff0c; 但是只在一个地方定义。加入 extern 修饰的是变量的声明&#xff0c;说明此变量将在文件以外或在文件后面部分…

git相关资料

https://github.com/xirong/my-git 转载于:https://www.cnblogs.com/zhao1949/p/6265503.html

mysql动态变量查询_MySQL将变量传递给动态查询

对不起&#xff0c;如果这是一个基本问题&#xff01; 直至现在我已经创造了PHP的MySQL查询和跨变量传递SQL调用中是这样的&#xff1a;MySQL将变量传递给动态查询$myparam $_GET["id_tbl"];mysql_select_db($database_camerich, $camerich);$query_rs_table sprin…

java8--IO(java疯狂讲义3复习笔记)

产生文件 File file new File("abc.txt");if(!file.exists()){System.out.println(file.exists());file.createNewFile();}System.out.println(file.getAbsolutePath()); 关于临时文件 1).放在指定目录,此时已项目为默认目录 File file File.createTempFile("…

python网络平台_python学习(九) 网络编程学习--简易网站服务器

python 网络编程和其他语言都是一样的&#xff0c;服务器这块步骤为&#xff1a;1. 创建套接字2. 绑定地址3. 监听该描述符的所有请求4. 有新的请求到了调用accept处理请求Python Web服务器网关接口(Python Web Server Gateway Interface&#xff0c;简称“WSGI”)&#xff0c;…

LeetCode 451. Sort Characters By Frequency

Mediocre solution is O(nlgn) by using max-heap - but, remember bucket sort? it is O(n)转载于:https://www.cnblogs.com/tonix/p/6269000.html

rabbit和mysql事务_分布式事务原理及SpringBoot整合RabbitMQ实现可靠事件,TCC事务模型及接口幂等性...

分布式事务我们知道在单数据库系统中&#xff0c;实现数据的一致性&#xff0c;通过数据库的事务来处理比较简单。在微服务或分布式系统中&#xff0c;各个独立的服务都会有自己的数据库&#xff0c;而不是在同一个数据库中&#xff0c;所以当一组事务(如商品交易中&#xff0c…

rhel Linux 网络配置

--网络配置 vi /etc/sysconfig/network-scripts/ifcfg-eth0 1)DHCPDEVICEeth0BOOTPROTOdhcpONBOOTyes2)静态IP DEVICEeth0 BOOTPROTOnone IPADDR192.168.0.22 NETMASK255.255.255.0GATEWAY192.168.0.254DNS11…