当前位置: 首页 > 面试题库 >

Java等于/等于和==运算符之间的区别?

吴升
2023-03-14
问题内容

a == b和之间有什么区别a.Equals(b)


问题答案:

假设的类型ab是引用类型:

  • 在Java中,==将始终比较身份 -即两个值是否是对同一对象的引用。这也称为引用相等。Java没有任何用户定义的运算符重载。

  • C#中,这取决于。除非有一个重载的运算符来处理它,否则==的行为类似于Java(即比较引用相等性)。但是,如果存在一个与and 的编译时类型匹配的重载(例如,如果它们都被声明为字符串),那么将调用该重载。这可以表现怎么想的,但它通常实现的值相等(即和可参照不同,但相同的值,它仍然会返回true)。abab

在这两种语言中,a.Equals(b)a.equals(b)都会调用由声明的virtual Equals/ equals方法Object,除非通过的编译时类型引入了更具体的重载a。在a引用的对象的执行时类型中,可以覆盖或可以不覆盖此对象。在.NET和Java中,该实现Object还检查身份。请注意,这取决于执行时间类型,而不是过载解析所依赖的编译时间类型。

当然,如果a是,null则在尝试调用或时会得到一个NullReferenceException/NullPointerExceptiona.equals(b)a.Equals(b)



 类似资料:
  • 以下是输出 第1行返回,第3行返回false。 我不明白为什么编译器不认为“name1”和“sb”包含相同的值 类似地,编译器并不认为“s”和“sb”包含相同的字符串(都是非原语)。 有人能解释一下line1和line3的输出吗?

  • 问题内容: 在PHP中,和运算符之间有什么区别吗? 在手册中,它指出: 我猜没有太大的区别,但我很好奇。 问题答案: 在主要的Zend实现中,没有任何区别。您可以从PHP语言扫描程序的Flex描述中获取它: 生成的令牌在哪里。因此,Bison 解析器不会区分和标记,而是将它们等同对待:

  • 问题内容: 和之间有什么区别? 松散比较到底如何工作? 严格比较到底如何工作? 有什么有用的例子吗? 问题答案: 松散之间的差等于操作员和严格相同的运算符中被精确地说明手册: 比较运算符 松散相等的比较 如果您使用的是运营商,或者松散的使用相比其他运营商相比,诸如,或者,你总是要看看 上下文 看什么,在哪里,为什么得到的东西转化为理解是怎么回事。 转换规则 转换为布尔值 转换为整数 转换为浮点 转

  • 问题内容: 有人可以解释一下SQL中的以下行为吗? 问题答案: 是标准SQL-92;是等效的。两者都评估值,但不是-是占位符,表示不存在值。 这就是为什么您只能在此类情况下使用/作为谓词的原因。 此行为不特定于SQL Server。所有符合标准的SQL方言都以相同的方式工作。 注意 :要比较如果您的 值不为null ,请使用,而要与 不为null 值进行比较,请使用。我不能说我的值是否等于NULL

  • 问题内容: 我来自ac风格语言,因此我很自然地使用不相等的语言,但是当我使用Python时,从我阅读的文档中我了解到为此目的使用了运算符。 最近,我看到了很多使用的代码,所以我的问题是,其中之一比其他的更受青睐,还是其中之一被弃用了。 另外,我想知道它们之间是否有任何区别。 问题答案: 蟒2只支持 两个 ,在Python 3的操作者已被删除。 两者之间没有区别,但是是首选形式。

  • 问题内容: 有两个不等于运算符-和。 它们之间有什么区别?我听说这比其他字符串比较有效。任何人都可以对此声明做出定性评论。 问题答案: 它们是相同的(与第三种形式一样)。 不过请注意,从解析器的角度来看,它们仍然被认为是不同的,这是为将不匹配或定义的存储轮廓。 这不像在解析器对待和还在分析阶段,所以你不能超载,并为不同的运营商。