Java判等那些事

摘要:

近段时间学习Java,发现了一个比较有意思的现象,两个字符串明明内容相同,但是在用“==”判等的时候,却返回“false”。后来求助了一下前辈们的博客,了解到:在Java中“==”和“equals()”两种判等方法在原理上是存在很大差异的。具体的,可能要看一些例子才能很好的说明白。

Integer a = 20;
float b = 20.0f;
int c = 20;
System.out.println(a==b);  //true
System.out.println(a==c);  //true
System.out.println(b==c);  //true
System.out.println(a.equals(b));  //false
System.out.println(a.equals(c));  //false

String d = "hello";
String e = "hello";
System.out.println(d==e);  //true
System.out.println(d.equals(e));  //true

String f = new String("world");
String g = new String("world");
String h = "world";
System.out.println(f==g);  //false
System.out.println(f.equals(g));  //true
System.out.println(f==h);  //false
System.out.println(f.equals(h));  //true

上述代码和结果其实已经非常清晰了,大概可以看出来,“equals()”是对内容的判等比较,而“==”则不是,至少从结果上看是这样的。那么,“==”究竟是怎么比较的呢?这个就需要从堆栈的存储进行解释了。


这里贴一张前辈的图片,个人觉得,看完这张图片,基本上这一块内容就差不多了。

Java判等那些事

“==”:比较的是两个字符串内存地址(堆内存)的数值是否相等,属于数值比较;

 “equals()”:比较的是两个字符串的内容,属于内容比较。


而我们一般情况下的需求基本上都是“equals()”,用到“==”的时候是很少的。这一点,对Java不是很熟悉的小伙伴们可能要特别注意一下下了。