java中==和equals()方法的区别

==和equals()在java中都是比较内容是否相同的,那么他们在使用上有什么区别和需要注意的地方呢?

首先:
== :如果比较的对象是基本数据类型,比较的是数值是否相同;如果比较的是引用数据类型,比较的是地址值是否相同.

    int a = 10;
    int b = 10;
    String str = "10";
    double c = 10.0;
    int d = 97;
    char ch = 'a';
    System.out.println(a == b);//true
    //System.out.println(a == str);
    //这里需要注意String类型在java中是引用类型,不能直接用==比较,会在编译过程中报错
    System.out.println(a == c);//true
    System.out.println(d == ch);//true char类型的a对应的ascii编码是97所以与d相等

equals()方法 :比较的是对象的内容是否相同
注意:
- equals()方法不能比较基本数据类型
- equals()方法在底层实际上也是调用了”==”的判断,如果没有对equals()方法重写,实际上比较的是引用类型的变量所指向的对象的地址

比如自己创建的两个对象,比较对象的内容时,结果为false,若想要实现此功能需要在自己创建的类中,重写equals()方法

  • 多数java提供的对象,都重写了equals()方法

    String str1 = "aaa";
    String str2 = "aaa";
    String str3 = new String("aaa");
    String str4 = "aa";
    String str5 = str4 + "a";
    String str6 = "aa" + "a";
    System.out.println(str1.equals(str2));//true
    System.out.println(str1.equals(str3));//true
    System.out.println(str1 == str3);//false
    

    以上两个输出结果不同,就是因为,String默认重写了equals方法,在调用equals方法时,比较的是内容是否相同,”==”比较的是两个对象的地址是否相同,str3因为是用new的方式创建的对象,new出来的对象存放在堆中,str3存放的是堆中的地址,而str1的内容是在常量池中,所以地址值会不同

    System.out.println(str1 == str5);//false
    System.out.println(str1 == str6);//true
    

    String类型,右侧的加法运算,只要有一个不是常量,结果保存的地址值就不会是常量池中的地址,所以str1的地址值不等于str5

猜你喜欢

转载自blog.csdn.net/Cyy19970527/article/details/81632778
今日推荐