equals在Java6和Java7中的工作方式不同

equals在Java6和Java7中的工作方式不同,java,Java,在java 6和java 7中等于vs== 不幸的是,我没有一个例子,因为我在学校帮助一些学生,有时他们在java 7中使用这种结构,甚至可以处理一些对象,我只是想知道java 6和7在这方面是否有一些不同,我知道当我们使用字符串时,我们应该使用aways equals 我已经用equals测试了字符串和对象,但是我意识到有时候在java 7中使用==代替equals是没有问题的,java 6和7处理这个问题的方式有什么不同吗?我很确定您通常比较了字符串和字符串文本 Object o = new

在java 6和java 7中等于vs==

不幸的是,我没有一个例子,因为我在学校帮助一些学生,有时他们在java 7中使用这种结构,甚至可以处理一些对象,我只是想知道java 6和7在这方面是否有一些不同,我知道当我们使用字符串时,我们应该使用aways equals


我已经用equals测试了字符串和对象,但是我意识到有时候在java 7中使用==代替equals是没有问题的,java 6和7处理这个问题的方式有什么不同吗?

我很确定您通常比较了字符串和字符串文本

Object o = new Object();
Object o2 = new Object();
o == o2  -> False as it compares object identity 
o.equals(o2) -> False because default implementation of equals compares identities.


String a = new String("a1");
String b = new String ("a1");
String c = "a1";
String d = "a1"; 

a == b -> False as it compares object identity 
a.equals(b) -> True as String ovverrides the method and it compares String's content
c == d -> True because these are declared as string literals and have the same identity (interned Strings are stored in memory only once to reduce memory usage)
c.equals(d) -> True because content of strings is the same.

有许多情况下==可能有效。例如,某些整型值和字符串值共享一个公共缓存,如果要比较的值都来自该缓存,则将获得匹配

例如:

 Integer.valueOf(1) == Integer.valueOf(1)
是真的,但是

 new Integer(1) == new Integer(1)
这是错误的


一般来说,除了在非常可控的情况下,你不应该使用==进行比较,这不值得冒险。

请展示一个简短但完整的程序来演示问题。没有细节,这个问题太模糊了,无法回答。我有点怀疑有很大的区别。你不应该用“==”来比较字符串内容的相等性。你的问题需要一个SSCCE[我知道我不应该用“==”问题在于,我在一门课程中帮助新生,有时他们会使用它并发挥作用,因为我没有这样的例子