日期:2014-05-18  浏览次数:20655 次

请教一下关于==和equals的问题
在java中
  String a = new String(new char[] { 'h', 'e', 'l', 'l', 'o' });
  String b = new String(new char[] { 'h', 'e', 'l', 'l', 'o' });  
  System.out.print(a == b);
  System.out.print(a.equals(b));

  Object g = a;
  Object h = b;
  System.out.print(g == h);
  System.out.print(g.equals(h));

输出结果为:false true false true

这个我理解

但在C#中,为什么

  string a = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
  string b = new string(new char[] { 'h', 'e', 'l', 'l', 'o' });
  Console.WriteLine(a == b);
  Console.WriteLine(a.Equals(b));

  object g = a;
  object h = b;
  Console.WriteLine(g == h);
  Console.WriteLine(g.Equals(h));

输出结果为:true true false true

是不是Java和C#的new机制不一样,求指教。。。谢谢

------解决方案--------------------
探讨

如果两个都换成:
String a = "aa";
String b = "aa";
之类的,就是不用new,此时Java和C#的结果都是一样的,可以用堆栈来解释。可上面new出来的话就不一样了,是不是new机制问题?