请说一下 equals 和 == 的区别
根据我几次换工作的经验,无数次面试的经验.假如,你去面 java,该问题属于必问题.那么,他们之间到底有啥区别呢?
先上一段代码如下:
输出结果如下: true/true/false/true
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));
跟你想象的结果是否一致呢?
==
其实,== 作用于基础数据类型,比如 int,long,float 等.
这些数据类型的共同点即基础数据类型.而 Strng,Integer 为 java 提供给我们的一组对象.
说到对象,在进行比较的时候如果使用 == 运算符,那么比较的就不仅仅是对象的值了,还需要比较对象的内存地址.因为上述例子中的两个 string 均是 new 出来的一个对象,也就是说对于的内存地址是不一致的,因此得到的结果是 false.
equals
equals 用于比较两个对象的值,上述例子中,使用 equals 去比较两个对象的值,均为 aaa,因此返回值为 false.
注意
在 java 编码过程中,有时候需要用一个对象给另外一个对象赋值.比如:
这时候,就把 a 整个赋值给了 b,包括内存地址.
Student a = new Student();
Student b = a;
这样做的后果是,假如在其他地方对 a 对象进行了操作,b 对象对应的也会发生改变.
正确做法应该是这样:
Student a = new Student();
Student b = new Studnet();
b.setXXX(a.getXXX());
...
...
来源: http://www.jianshu.com/p/f0160c4210fc