zoukankan      html  css  js  c++  java
  • 三探String类型

    最近看了李天平老师的《.net深入体验与实战精要》,里面提到了String类型的一些东西,我一开始是看不明的,但是后面通过与李老师

    通了email之后,豁然开朗。下面就再一次写写有关String类型的一些东西吧。

              首先还是要给大家看一句话:string虽然为引用类型,但是(== 和 !=)是为了比较 string 对象(而不是引用)的值。

              还是先看看代码,如果大家可以完全看懂明白里面的意思,我觉得大家就已经掌握了90%的String类型了。

    代码
    string s1 = "te";
    string s2 = "te";
    string s3 = new string(new char[] { 't', 'e' });
    string s4 = new string(new char[] { 't', 'e' });
    第一种情况:
    object o1 = s3;
    object o2 = s4;
    Console.WriteLine(o1
    == o2);
    Console.WriteLine(o1.Equals(o2));
    第二种情况:
    object o1 = s1;
    object o2 = s2;
    Console.WriteLine(o1
    == o2);
    Console.WriteLine(o1.Equals(o2));

    究竟会出现什么结果呢???

               首先先解释一下

                    string s1 = "te";
                    string s2 = "te";
                    string s3 = new string(new char[] { 't', 'e' });
                    string s4 = new string(new char[] { 't', 'e' });

                如图所示,s1,s2,s3,s4的在栈中的内容就是所指向的字符串在堆中的地址,"te"在堆中的地址是1111,但是大家注意一下,c#中是没有给 s2


    分配内存的,也就是s1,s2都是同一内存地址的别名,而c#分别给s3,s4分配了内存,而(==)是判断栈中的内容是否相等的。也就是判断 s1s2s3s4在栈中


    的内容是否相等,显然,他们的值都是1111,所以s1==s2==s3==s4的。


               而object o1=s3和object o2=s4,就是初始化一个对象,他们所指的地址分别是s3和s4的地址,也就是栈中的地址,分别是1101和1102,


    所以o1!=o2的,因为o1和o2的内存地址显然不同。


               再看看object o1=s1和object o2=s2,s1和s2都是同一个内存地址1100,所以在初始化一个object对象时,o1和o2的内存地址都是1100,


    所以o1==o2的。


               相信大家都已经知道了上面的答案了吧?希望我这个解释之后,能让大家对String类型有更深一步的了解,也希望大家可以和我交流。


    ps:顺便附上面的答案给大家参考

    代码
    string s1 = "te";
    string s2 = "te";
    string s3 = new string(new char[] { 't', 'e' });
    string s4 = new string(new char[] { 't', 'e' });
    第一种情况:
    object o1 = s3;
    object o2 = s4;
    Console.WriteLine(o1
    == o2); //false
    Console.WriteLine(o1.Equals(o2)); //true
    第二种情况:
    object o1 = s1;
    object o2 = s2;
    Console.WriteLine(o1
    == o2); //true
    Console.WriteLine(o1.Equals(o2)); //true
  • 相关阅读:
    matlab read txt
    matlab读取数据并操作
    NFS 共享信息泄露漏洞
    centos6.8环境下安装elasticdump进行elasticsearch索引结构mapping的备份
    Linux命令行下如何终止当前程序
    ubuntu 使用sudo vim /etc/apt/sources.list命令修改文件后该如何退出?
    隐写工具zsteg安装及使用教程
    【转】今天做CTF隐写术的题偶然发现一隐写图片查看的神器------stegsolve,分享给大家
    java安装及配置环境变量
    deepin使用root身份运行
  • 原文地址:https://www.cnblogs.com/cookies9/p/1744764.html
Copyright © 2011-2022 走看看