String first = "hehe";
String second = "hehe";if(f1==s1)
    Console.WriteLine("相等");
else
    Console.WriteLine("不相等");这个执行结果是相等,我有些不理解,我知道String已经创建就是不变的
但是我还是不理解为什么上面的结果是相等,String类型不是引用类型么?

解决方案 »

  1.   

    string是引用类型,也有值类型的特征.
      

  2.   

    first和second指向了在内存中的同一个常量字符串"hehe"如果你是
    String first = new String("hehe");
    String second =new String("hehe");first和second就肯定不一样了
      

  3.   

    楼上的自己写一下,String类哪有那样的构造函数啊?????char[] tmp={'h','e','h','e'};
    char[] tmp2={'h','e','h','e'};String first = new String(tmp);
    String second = new String(tmp2);if(first==second)
        Console.WriteLine("相等");
    else
        Console.WriteLine("不相等");即使是这样写,结果仍然是相等,为啥???
      

  4.   

    因为string 重载了 == , 就不光是引用比较了。
    char[] tmp={'h','e','h','e'};
    char[] tmp2={'h','e','h','e'};object first = new String(tmp);
    object second = new String(tmp2);
    if(first==second)应该是不相等
      

  5.   

    To:amandag(高歌) 
       如果在java里,你的结果是对的,呵呵
      

  6.   

    To:runrunrun自己去试试啊,看结果是什么?
      

  7.   

    To:runrunrun没看清楚,你的那个结果是对的
      

  8.   

    因为String类重写了==/!=/+...等运算符,使它符合值类型的特性。事实上,这是一件好事。
      

  9.   

    不好意思,不是说 kssys 。 CSDN刷新有问题
      

  10.   

    这是特殊的引用,比较string比较的是内容
      

  11.   

    如果比较值的话,用Equals方法就好了,为什么要重写==???
      

  12.   

    比较String的引用意义不大!String first = "hehe";
    String second = "hehe";我可以肯定的告诉你,这两个字符串的引用也是一样的,听说过字符串池没?
      

  13.   

    pn_nl(2006年,两个目标,一定要实现!!) ( ) 信誉:100  2006-06-09 09:55:00  得分: 0  
     
     
       如果比较值的话,用Equals方法就好了,为什么要重写==???
      
     
    个人感觉还是更习惯使用==来比较...
      

  14.   

    尽管 string 是引用类型,但定义相等运算符(== 和 !=)是为了比较 string 对象(而不是引用)的值。这使得对字符串相等性的测试更为直观。个人觉得比较字符串的值用的比较多
      

  15.   

    字符串等同/比较方法
    可以通过许多方法比较两个字符串。对于等同和不等同比较,主要差别当然在于,是比较引用(两个字符串指向同一对象)还是比较值(两个字符串包含相同的字符)。对于等同比较和关系比较,另一个主要差别在于,是使用当前环境的排序顺序,还是使用字符串中各个字符的原始序号值。(还有一个较小的差别,即比较时是否区分大小写。)比较的默认设置是使用它们所在线程的当前环境并区分大小写。通常,此设置就是您需要的设置。== 运算符调用 String.Equals,后者将执行区分环境和大小写的比较。如果您希望使用 C# 比较引用,可以将两个字符串引用都强制转换为 Object,或者使用 Object.ReferenceEquals。
      

  16.   

    .NET框架程序设计一书中讲到过,应该是字符串驻留技术,有多个相同string对象出现时,cls优化处理了,实质上是同一对象,所以==是返回true的!
      

  17.   

    String first = new String("hehe");
    String second =new String("hehe");first和second就肯定不一样了
    这样写无法通过啊,
    但是String first = "hehe";
    String second = "hehe";if(f1==s1)
        Console.WriteLine("相等");
    else
        Console.WriteLine("不相等");肯定相等.你的定义类型一样,不过是变量名不一样,能不等吗,