今天做了一个业务模块,需要简单的遍历比较值,所以习惯性的用了 “==” ,但是结果没有达到预想的结果是什么鬼?
看到这里,有人一定会指出这俩货不是基本变量!
“关系操作符生成的是一个boolean结果,它们计算的是操作数的值之间的关系”。——《Java编程思想》
这句话我的理解就是==操作比较的是两个变量的值是否相等,而对于非基本数据类型的变量,在一些书籍中称作为 引用类型的变量。引用类型的变量存储的并不是 “值”本身,而是于其关联的对象在内存中的地址,所以说上面我的代码其实比较的不是值而是其关联的对象在内存中引用的比较,所以结果没有达到我的预期效果。
而后我又把==换成了equals进行测试,结果达到了我的要求。
然后我就查看了一下equals这个方法
原来它是先将封装类型的Long转化成基本类型的long,然后在进行比较判断,一切都真相大白了。
==:操作比较的是两个基本数据变量的值是否相等,对于非基本数据也就是引用类型,是对其内存中引用的比较
equals:equals方法不能作用于基本数据类型的变量
如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;
诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。