摘要:
近段时间学习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()”是对内容的判等比较,而“==”则不是,至少从结果上看是这样的。那么,“==”究竟是怎么比较的呢?这个就需要从堆栈的存储进行解释了。
这里贴一张前辈的图片,个人觉得,看完这张图片,基本上这一块内容就差不多了。
“==”:比较的是两个字符串内存地址(堆内存)的数值是否相等,属于数值比较;
“equals()”:比较的是两个字符串的内容,属于内容比较。
而我们一般情况下的需求基本上都是“equals()”,用到“==”的时候是很少的。这一点,对Java不是很熟悉的小伙伴们可能要特别注意一下下了。
小结:
整体上主要是对Java学习过程中一个小知识点的记录。
小编目前只是博客新人,在校生一名,如果读者对小编写的还比较满意,欢迎关注支持啊!
如果有什么问题,也可以加小编的QQ进行交流,不过,记得在备注里介绍自己哦。(QQ:1329924827)