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

Java “ .equals”和“ ==”有什么区别?[重复]

段干弘扬
2023-03-14
问题内容

我今天换了讲师,他对我说了奇怪的代码。(他说最好用.equals,当我问为什么时,他回答“因为是!”)

所以这是一个例子:

if (o1.equals(o2))
{
 System.out.println("Both integer objects are the same");
}

而不是我习惯的:

if (o1 == o2)
{
  System.out.println("Both integer objects are the same");
}

两者之间有什么区别。为什么他的方式(使用.equals)更好?

通过快速搜索发现了这一点,但我无法真正理解该答案:


问题答案:

在Java中,==总是只比较两个引用(对于非原始元素),即,它测试两个操作数是否引用同一对象。

但是,该equals方法可以被覆盖-因此两个不同的对象仍然可以相等。

例如:

String x = "hello";
String y = new String(new char[] { 'h', 'e', 'l', 'l', 'o' });

System.out.println(x == y); // false
System.out.println(x.equals(y)); // true

另外,值得注意的是,任何两个相等的字符串常量(主要是字符串文字,而且还可以通过串联来组合字符串常量)最终将引用同一字符串。例如:

String x = "hello";
String y = "he" + "llo";
System.out.println(x == y); // true!

这里xy是同一个字符串的引用,因为y是一个编译时间常数等于”hello“。



 类似资料:
  • 对于基本类型,==比较的是值; 对于引用类型,==比较的是地址; equals不能用于基本类型的比较; 如果没有重写equals,equals就相当于==; 如果重写了equals方法,equals比较的是对象的内容;

  • < code>$@和< code >“$ @”有什么区别吗? 我知道非特殊字符可能存在差异,但是带有输入参数的符号呢?

  • 问题内容: 我正在更深入地学习哈希码,并发现: 1.如果覆盖equals(),则也必须覆盖hashcode()。 2.要查找2个对象是否为同一对象,请使用==运算符 考虑到这两个因素,在Java中,我假设使用什么来比较 两个实例是否相同, 实际上在做 但是通过运行下面的测试,似乎我错了。 根据使用并查看是否调用的测试。 所以我的问题是,如果可以用来比较对象是否相同,覆盖e 和比较方法的目的是什么?

  • 问题内容: 精通PHP但学习Java的人应该知道的PHP与Java之间的主要区别是什么? 编辑: 我的意思是这些语言的语法上的差异,即它们的数据类型,它们如何处理数组和引用变量等等:) 问题答案: 这不是一个详尽的清单,我是PHP开发人员,前一段时间做过Java之旅,所以做了Caveat Emptor。 Java中的每个变量都必须以数据类型开头。这包括基本类型,例如boolean,int,doub

  • 问题内容: JavaScript和Java有什么区别? 问题答案: Java和Javascript相似,例如Car和Carpet相似。

  • 问题内容: 在线查看职位空缺时,我注意到某些职位需要“核心Java”知识。什么是核心Java,它与Java有何不同? 问题答案: “核心Java”是Sun的术语,用于指 Java SE,标准版 和一组相关技术,例如Java VM,CORBA等。这主要是为了区别于Java ME或Java EE。 还要注意,他们在谈论的是一组库,而不是编程语言。也就是说,无论使用什么库,编写Java的基本方式都不会改