关于java中==操作和.equals()函数的有趣讨论

来源:互联网 发布:剑三官方道长捏脸数据 编辑:程序博客网 时间:2024/05/19 13:06

首先,==和.equals()函数的区别,简单说来,就是==比较的是两个变量是否引用的同一个变量,而.equals()比较的是两个变量值是否相同,也就是变量的”内容“。即,如果两个变量值相同,但是他们引用的是两个不同地址的变量,那么前者返回false,而后者返回true。

有趣的是如下两段程序

       <pre name="code" class="html">        Integer i1,i2;        i1 = 1;        i2 = 1;        System.out.println(i1==i2);        System.out.println(i1.equals(i2));


        Integer i1,i2;        i1 = 1;        i2 = new Integer(1);        System.out.println(i1==i2);        System.out.println(i1.equals(i2));


对于第一段,输出为true,true,而对于第二段,输出为false,true。

之所以会有这样的区别,原因在于,在执行程序的过程中,程序会创建变量的缓冲池,当i2用“i2=1”语句赋值时,程序会在缓冲池中先找寻相同的对象,此时由于i1也使用“i1=1”赋值,使得程序找到了相同的对象,于是使用该对象创建了i2,于是i1,i2不仅具有相同的值,他们也是同一个对象的引用。

而对于第二段程序,i2采用new赋值,这就告诉程序,我要创建一个新的对象,用这个新的对象来创建i2。此时,尽管i1,i2具有相同的值,但是他们却不是相同对象的引用,于是导致输出是false,true。


0 0