【问题标题】:What is the difference between Object.ReferenceEquals and IS operator in Visual Basic? [duplicate]Visual Basic 中的 Object.ReferenceEquals 和 IS 运算符有什么区别? [复制]
【发布时间】:2014-09-30 10:58:01
【问题描述】:

在 Visual Basic 中,IS 运算符与使用 Object.ReferenceEquals 确定两个变量是否引用同一个对象之间有什么区别?

据我从 MS 文档中可以看出,它们具有相同的效果,但我认为 IS 更快,因为它不涉及函数调用。

【问题讨论】:

  • 函数调用开销(如果有的话)是无关紧要的。
  • 是的,它是重复的 - 我的搜索没有找到它。它可能会忽略像“is”这样的词,并且 ReferenceEquals 给出了太多的命中。找到它做得很好!

标签: vb.net object equality


【解决方案1】:

Is 运算符确定两个对象引用是否指向同一个 目的。但是,它不执行值比较。如果 object1 和 object2 都引用完全相同的对象实例,结果为 True; 如果没有,则结果为 False。

Is 也可以与 TypeOf 关键字一起使用来创建一个 TypeOf...Is 表达式,用于测试对象变量是否与数据类型兼容。

见下文。

在比较 s1 和 s2 时同时使用 Is 和 Object.ReferenceEquals 返回 true。

但是在比较 s3 和 s4 时返回 true,但 Object.ReferenceEquals 方法返回 false,因为尽管它们具有相同的字符串值,但该字符串没有被保留。

      String s1 = "String1";
      String s2 = "String1";
      Console.WriteLine("s1 = s2: {0}", Object.ReferenceEquals(s1, s2));
      Console.WriteLine("{0} interned: {1}", s1, 
                        String.IsNullOrEmpty(String.IsInterned(s1)) ? "No" : "Yes");

      String suffix = "A";
      String s3 = "String" + suffix;
      String s4 = "String" + suffix;

希望这会有所帮助。

【讨论】:

  • 谢谢。碰巧我不用来比较字符串,所以不会出现实习的问题。但它提出了一个有趣的问题。如果您的示例中的 s3 和 s4 没有被实习,那么它们在什么意义上“引用同一个对象”(引用第一段中的文档)?似乎对字符串进行了特殊处理。或者,如果它们的所有字段都具有相同的值,那么“IS”对于任何两个相同类型的对象是否为真?
  • 我使用 VB 程序得到不同的结果。 “Is”和“RefEquals”都给出相同的结果:S1:S2 比较为“True”,S3:S4 为“False”。
猜你喜欢
  • 1970-01-01
  • 2016-04-28
  • 2011-01-02
  • 2012-12-19
  • 2016-06-22
  • 2016-07-25
  • 1970-01-01
  • 2012-06-24
  • 2012-09-09
相关资源
最近更新 更多