这种讲解equals和==区别的方式,全网第一!
- 2019 年 10 月 31 日
- 筆記
开始学习Java的总是被equals、==混淆,即使看了相关的技术贴子,过一段时间也很容易忘记,那么有没有一种办法使得还在“淤泥”中挣扎中的攻城狮们过目不忘呢?或许本文对你会有所帮助,不信,你看看再说话。
首先咱来了解一下在JVM中内存分配的知识
在JVM中,内存分为堆内存和栈内存。它们的区别可以用下图来形象的解释:

暂且不管方法区。单看堆和栈。 TestClass testClass =
new
TestClass();
,当我们创建对象TestClass()时候,就会调用TestClass的构造函数来开辟空间,将对象数据存储到堆内存中,与此同时在栈内存中生成对应的引用,在后续代码中调用的时候我们直接调用的是栈内存中的引用。
equals与==区别:
1.==是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同 2.==是指对内存地址进行比较 , equals()是对字符串的内容进行比较 3.==指引用是否相同, equals()指的是值是否相同 用一张具有生命力的图直观表示一下他们之间的关系:

神总结:
- == 比较如果说是基本数据类型比较的是值 如果是引用数据类型比较的是内存
- equals 比较的是值
简单的用代码检验一下:
//a为一个引用 String a = new String("abcd" ); //b为另一个引用,a跟b的对象内容是一致的 String b = new String("abcd"); //把“abcd"放在常量池中 String c = "abcd"; //从常量池中查找“abcd" String d = "abcd" ; System.out.println(a == b);//false System.out.println(a.equals(b));//true,在String中 equals方法被重写当物理地址不同时,会进一步比较值。 System.out.println(d == c);//true System.out.println(c.equals(d));//true