类:AnimalsAnimals animalList1 = new Animals();
Animals animalList2 = new Animals();
1.
if(animalList1==animalcule)
{}animalList1,animalList2是引用类型, 答案是false
2.
string str1 = "3";
string str2 = "3";
if (str1 == str2)
{}
str1,str2也是引用类型,结果怎么是true呢

解决方案 »

  1.   

    if(animalList1==animalcule)//animalcule是什么东东?
      

  2.   

    难道你不知道string是特殊的引用类型吗?它是按照内容比较的,而不是引用地址。
      

  3.   


    1.
    if(animalList1==animalList2)
    {}
    打错了,不好意思
      

  4.   

    string 类型比较特殊,看看.net基础教程就知道了
      

  5.   


    我能这么理解你的话吗?既然是同一个对象,那我“3”==“4”应该为true
      

  6.   

    string 比较默认是按照序号排序规则比较,即Ascii码
    引用类型则是按照对象地址看是否引用同一个对象,animalList1==animalcule类似于 Object.ReferenceEquals(animalList1,animalcule)
      

  7.   

    string是特殊的引用类型。比较的是值,不是引用地址。
      

  8.   


    string是特殊的引用类型,好了!结贴
      

  9.   

    string类型重写了Equals()方法,对比时比较的是值,不是地址,就这么简单
      

  10.   

    引用类型的比较,这个要看具体的情况,不好说为什么相等,
    字符串的比较,可以参考以下两个原因中的一个,
    1. 因为string类型重载了 == 运算符,使他们比较值,而不仅仅只是比较引用
    2. 在C#中,所有相同的字符串,只保留一个副本。提高效率。这就是为什么字符串“不可以修改”的原因
    字符串被修改了之后,原来字符串的引用计数被减1,而被修改的字符串变量则指向新的字符串地址。string a="3",b="3",c="3";a,b,c都指向了相同的内存地址。因为字符串只有一个副本。
      

  11.   

    修正一下
    2. 在C#中,所有相同的字符串常量,只保留一个内存副本。提高效率。这就是为什么字符串“不可以修改”的原因string a="3",b="3",c="3";
    a,b,c都指向相同的字符串常量,常量字符串"3"引用数为3个a = "1231";之后
    b,c指向字符串常量"3", 常量字符串"3"引用数为2个
    系统新创建一个字符串常量"1231",并且a变量指向了它,常量字符串"1231"引用数为1个