我今天换了讲师,他对我说了奇怪的代码。(他说最好用.equals,当我问为什么时,他回答“因为是!”)
.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方法可以被覆盖-因此两个不同的对象仍然可以相等。
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!
这里x和y是同一个字符串的引用,因为y是一个编译时间常数等于”hello“。
x
y
hello