宁武皇仁光九年锦文轩刻本《异闻录》载: 扶桑画师浅溪,居泰安,喜绘鲤。院前一方荷塘,锦鲤游曳,溪常与嬉戏。 其时正武德之乱,潘镇割据,战事频仍,魑魅魍魉,肆逆于道。兵戈逼泰安,街邻皆逃亡,独溪不舍锦鲤,未去。 是夜,院室倏火。有人入火护溪,言其本鲤中妖,欲取溪命,却生情愫,遂不忍为之。翌日天明,火势渐歇,人已不见。 溪始觉如梦,奔塘边,但见池水干涸,莲叶皆枯,塘中鲤亦不知所踪。 自始至终,未辨眉目,只记襟上层迭莲华,其色魅惑,似血着泪。 后有青岩居士闻之,叹曰:魑祟动情,必作灰飞。犹蛾之投火耳,非愚,乃命数也。 ————《锦鲤抄》

【“==”与equals的区分】

“==”和equals
 
 
简单来说,“==”是关系运算符,而equals()是方法,不过他们的返回结果都是boolean(布尔类型)
 
详细的说:
1. “==” 可以比较值(两侧是基本类型),也可以比较地址,也就是比较两个对象在内存中的地址是否相同(两侧是引用类型),
基本数据类型包括:boolean,char,short,int,long,float,double(注意string类型不是基本数据类型)
引用类型:Map。。(引用类型就是除了基本数据类型之外的所有类型,也包括class类型)
另外数据类型比较一般都是用 ==,不过String类型比较一般都是equals
 
2.“equals”如果没有经过重写,只是引用object的equals方法,那么可以理解为equals和==是一样的功能——比较地址
如果重写过,那就根据重写内容来比较
 
如果举例来说:
  使用“==”  ,对于基本数据类型,就是比较变量的值是否相等,比如:int a = 6; int b = 3; a==b;返回就是false,这个大家都很熟悉
 如果是引用类型,就是比较地址   String a = new String(“abc”) ; String b = new String(“abc”);  这种情况下创建出来的”abc”对象会被存储到堆,
 a和b指向的“abc”分别存储到堆内存的不同位置。a和b里面保存的是”abc”在堆里面的内存首地址,这两个地址明显是不同的,所以我们在做 a==b操作的时候返回的为false
 
 
  使用“equals” ,如果类中没有重写过方法,那就是比较地址  
 
如果不明白可以看看下面的实例:实践出真知啦

 

public class equals {

    public static void main(String[] args) {
        StringBuffer a = new StringBuffer("aa");
        StringBuffer b = new StringBuffer("aa");
        System.out.println(a.equals(b));//false
        System.out.println(a==b);//false

        System.out.println("+++++分界线+++++");

        String s1 = new String("abc");
        String s2 = new String("abc");

        System.out.println(s1==s2);//false 两个变量的内存地址不一样,指向的对象不 一样,
        System.out.println( s1.equals(s2));//true    //两个变量的所包含的内容是abc,故相等。



    }
}

 

代码输出如下:

false

false
+++++分界线+++++
false
true

分析:

  前两个sout打印false是因为StringBuffer类中没有重写过equals方法,所以本质还是比较对象,而对象不同所以分配的内存地址也不一样的,所以是false

  后两个一个false,一个true,是因为String类重写了equals方法(感兴趣的可以去看看,idea中对着String左键单击就好),所以equals比较的是字符串内容,返回结果是true

 

posted @ 2021-02-21 23:06  哒布溜  阅读(108)  评论(0编辑  收藏  举报