您的位置:首页 > 编程语言 > Java开发

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

2016-04-03 22:54 274 查看
首先,==和.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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: