美文网首页程序员
java扫盲(二)说equals和==

java扫盲(二)说equals和==

作者: OnyWang | 来源:发表于2018-01-14 13:52 被阅读328次

请说一下equals和==的区别

根据我几次换工作的经验,无数次面试的经验。假如,你去面java,该问题属于必问题。那么,他们之间到底有啥区别呢?
先上一段代码如下:

int a =1;
int b=1;
String c = "aaa";
String d = "aaa";
System.out.println(a==b);
System.out.println(a.equals(b));
System.out.println(c==d);
System.out.println(c.equals(d));

输出结果如下: true/true/false/true

跟你想象的结果是否一致呢?

==

其实,==作用于基础数据类型,比如int、long、float等。
这些数据类型的共同点即基础数据类型。而Strng、Integer为java提供给我们的一组对象。
说到对象,在进行比较的时候如果使用==运算符,那么比较的就不仅仅是对象的值了,还需要比较对象的内存地址。因为上述例子中的两个string均是new出来的一个对象,也就是说对于的内存地址是不一致的,因此得到的结果是false。

equals

equals用于比较两个对象的值,上述例子中,使用equals去比较两个对象的值,均为aaa,因此返回值为false。

注意

在java编码过程中,有时候需要用一个对象给另外一个对象赋值。比如:

Student a  = new Student();
Student b = a;

这时候,就把a整个赋值给了b,包括内存地址。
这样做的后果是,假如在其他地方对a对象进行了操作,b对象对应的也会发生改变。
正确做法应该是这样:

Student a  = new Student();
Student b = new Studnet();
b.setXXX(a.getXXX());
...
...

相关文章

网友评论

    本文标题:java扫盲(二)说equals和==

    本文链接:https://www.haomeiwen.com/subject/yzykoxtx.html