==与equals方法的区别(Java基础)

1) 当 == 两边为8种基本数据类型时, == 判断的是两边变量中存放的内容是否相等。

2) 当 == 两边为引用数据类型时,== 判断的是引用数据类型的对象的内存地址是否一样;内存地址一样,则是同一个对象。

3)equals方法,只有对象才能拥有。需要Object子类重写,比较的是两个对象的内容。(如果子类不重写,功能与==一样。)

在String类重写了equals方法,字符串相同的两个String对象用equals方法,返回true。

 1 public class TestEquals {
2 public static void main(String[] args) {
3 String str1 = "aa";
4 String str3 = "aac";
5 String str4 = "aa" + "c";
6 String str5 = str1 + "c";
7 System.out.println("str3 == str4 :" + (str3 == str4)); // 【严重注意:str3 ="aac" 与 str4= "aa"+"c"】返回true
8 System.out.println("str3 == str5 :" + (str3 == str5)); // ==判断是否为同一内存空间(是否同一对象),返回false
9 System.out.println("==============");
10 String s1 = new String("aa");
11 String s2 = new String("aa");
12 System.out.println("s1==s2 :" + (s1 == s2)); // 两个不同的对象,返回false
13 System.out.println("s1.equals(s2) :" + s1.equals(s2)); // String类中重写了equals方法,返回true;
14 System.out.println("==============");
15 Dog d1 = new Dog("black", "60cm");
16 Dog d2 = new Dog("black", "70cm");
17 Dog d3 = new Dog("black", "60cm");
18 System.out.println("d1 == d2 :" + (d1 == d2)); // 两个不同的对象,返回false
19 System.out.println("d1.equals(d3) :" + d1.equals(d3)); // 在Dog类中,重写了equals方法,返回true
20 System.out.println("d1.equals(d2) :" + d1.equals(d2)); // d1和d2的height的属性值不同,返回false
21 }
22 }
23
24 class Dog {
25 private String color;
26 private String height;
27 public Dog() {
28 super();
29 }
30 public Dog(String color, String height) {
31 super();
32 this.color = color;
33 this.height = height;
34 }
35 /** * 重写equals方法 */
36 @Override
37 public boolean equals(Object obj) {
38 Dog dog = (Dog) obj;
39 if (this.color == dog.color && this.height == dog.height) {
40 System.out.print("同一只狗");
41 return true;
42 }
43 return false;
44 }
45 }

执行结果:

str3 == str4 :true
str3 == str5 :false
==============
s1==s2 :false
s1.equals(s2) :true
==============
d1 == d2 :false
同一只狗d1.equals(d3) :true
d1.equals(d2) :false
原文地址:https://www.cnblogs.com/csuwangwei/p/2279547.html