zoukankan      html  css  js  c++  java
  • C#string字符串的一些疑问

    一个C#资源分享平台,专 业分享学习高质量代码,每周期布置学习任务,激发学习C#兴趣!(QQ群:128874886) 

    做项目的过程中,遇到一个疑问,在处理字符串判断的时候,有三四种甚至更多方法,如果要判断字符串是否为空的话有这样几种办法:

    s.Length==0、 s==string.Empty、s=="" s==null

    疑问就出来了,哪种办法好呢,还是用&&连接起来全部判断?

    想必对于那些不太重视.NET基础的朋友们来说,对于知道上述三者之间的详细区别,或许还真有点难度。   
    首先,先说说string s = null和string s = ""二者间的区别。从字面意义上理解,二者都是给变量初始化为空,前者可以联想Object,那么可以说“初始化为空引用”;后者呢可以说“初始化为空 值”。看来二者间确实存在一种“不可告人的秘密”,当然这种区别仅仅是我们从肤浅的感性认识上的理解。从理论上说string s = null是不给它分配存储空间的,而string s = ""是给它分配一个长度为空的存储空间。
        其次,我们说说string s = string.Empty和string s = null的区别。在这里还想说说string和String的区别,二者我们在Visual Studio环境下开发时,根本看不出来区别,因为通过智能感知反馈给我们的信息都是“表示文本,既一系列Unicode字符”。呵呵蒙了吧!我们知道, 在.NET中所有引用类型和值类型都是继承自一个根类型Object,而这些“东西的”赖以生存的环境就是CTS,因为它们是在CTS中定义的,同时 CTS也是依赖CLR的,所以没有CLR也就没有CTS。言归正传,我的愚见是String是大哥,因为他是在CTS中就定义好的东西了,是基于CLR 的。而string仅仅是C#语法中一个String的变体,是基于C#的。二者好像没什么区别,只是在不同的环境下,特定的一种符号而已,不知道这么理 解对不对?呵呵
    好了,string.Empty和null是这样的,他俩都表示空,前者是一个空字符串,只不过这个字符串的值为空,但是在内存的 堆中是有准确指向的,而后者只是定义了一个string 类型的引用,变量并没有指向任何地方,还是那句话它 99.9%可能会在堆栈上占个“坑位”里面有个指针不指向任何地方。在使用前如果不实例化,都将报错。
        最后,通过上述我们还可以知道有3种方法可以表示字符串为空,s.Length == 0 , s == string.Empty , s == "" ,三者的性能也随着逐渐降低。
        希望有不对的大家能够及时指出,谢谢!
  • 相关阅读:
    ZOJ 3765 Lights (zju March I)伸展树Splay
    UVA 11922 伸展树Splay 第一题
    UVALive 4794 Sharing Chocolate DP
    ZOJ 3757 Alice and Bod 模拟
    UVALive 3983 捡垃圾的机器人 DP
    UVA 10891 SUM游戏 DP
    poj 1328 Radar Installatio【贪心】
    poj 3264 Balanced Lineup【RMQ-ST查询区间最大最小值之差 +模板应用】
    【转】RMQ-ST算法详解
    poj 3083 Children of the Candy Corn 【条件约束dfs搜索 + bfs搜索】【复习搜索题目一定要看这道题目】
  • 原文地址:https://www.cnblogs.com/feiyangqingyun/p/1968998.html
Copyright © 2011-2022 走看看