源于一次公司项目,对java基础还是理解的太浅.
    通常来说,Java判断两个对象是否相同可以用 == or equals();其中==是对对象内存地址的比较,若地址相同则判断为true,否则为false;而如以下代码,理想情况下程序会打印输出
    example1:

    1. String a = "abc";
    2. String b = "abc";
    3. String c = new String("abc");
    4. String d = new String("abc");
    5. System.out.println(a == b);
    6. System.out.println(a == c);
    7. System.out.println(c == d);

    那么a==b将返回true。因为在java中字符串的值是不可改变的,相同的字符串在内存中只会存一份,所以a和b指向的是同一个对象;

    那么a==b将返回false,此时a和b指向不同的对象。

    2、用equals方法比较的是字符串的内容是否相同,

    example:String a=new String(“abc”);

    String b=new String(“abc”); a.equals(b);将返回true。

    通常情况下,为了避免出现上述问题,判断字符串是否相等使用equals方法

    1. if(str1.equals(str2)){
    2. System.out.println("字符串相等");
    3. }else{
    4. System.out.println("字符串不相等");
    5. }

    例:

    1. String a = "数据";
    2. String b = "数据";

    a.equal(b)和b.equal(a)有什么区别

    a.equal(b)和b.equal(a)表达式表达的意思是一样的,都是为了判定a和b两个string对象是否相同,

    但是,前者表示a对象不能为空,否则会报错,后者表示b对象不能为空,否则报错

    equals()是object的方法,其实现为:

    1. public boolean equals(Object obj) {
    2. return (this == obj);
    3. }

    String方法对其重写:

    1. public boolean equals(Object anObject) {
    2. if (this == anObject) {
    3. return true;
    4. }
    5. if (anObject instanceof String) {
    6. String anotherString = (String)anObject;
    7. int n = value.length;
    8. if (n == anotherString.value.length) {
    9. char v1[] = value;
    10. char v2[] = anotherString.value;
    11. int i = 0;
    12. while (n-- != 0) {
    13. if (v1[i] != v2[i])
    14. return false;
    15. i++;
    16. }
    17. return true;
    18. }
    19. }
    20. return false;
    21. }