equlas比较和==比较
在实际编码中我们经常要使用比较,很多同学可能不清楚 "==" 和 equals() 比较有什么差别。好,废话不多说,下面来谈谈自己的理解:
"==" 对比 情况分两种,对象对比、基本数据类型对比
1.两个对象比较,使用 "==" 进行比较的时候,比较的是对象的内存栈地址(hashcode),不是比较对象存放在堆内存中的值,例如 String s1 = "abc", s2 = "abc"; Syetem.out.print(s1 = s2);
这时候返回的值是false;因为使用new关键字创建出来的对象,是存放在不同的内存地址。比较的是s1和s2的内存地址如下图
2.两个基本数据类型的比较,八大数据类型:char/byte/short/int/long/float/double 比较,就是对比变量的值,例如,
使用equals()方法比较,这里看你使用的是Object类里的equals()还是String类里的equals(),因为这个方法来自Object类,这里贴Object类的equals()图:
可以看到,比较的是两个对象的内存地址是否相等
这是String类里的equals()的代码,比较的是字符串里每个字符是否相等:
可以看的出来,比较的方式不一样,请看测试情况:
总结来说:
1)对于==,如果是用于基本数据类型的变量的比较,是比较“值”是否相等;
如果比较对象,则比较是栈内存地址
2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量
如果没有对equals方法进行重写,也就是使用Object类里的equals方法,则比较的是对象的内存地址;
若String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。