请说一下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());
...
...
网友评论