美文网首页程序员
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