项目里遇到两个Long类型的变量,要进行大小比较,很天然的使用==,结果两个相同的值进行比较最后怎么都是返回false。后来仔细思考了一下,发现一些问题缓存
1。两个Long类型的变量进行==比较,既然是Long,就是对象,使用==比较就是在比较两个对象内存地址是否相同,然而我要进行比较的是值,那么这里用==就不恰当对象
2。其次,Long a= 123456L这种状况,右边是基本类型long,若是要把它赋给Long对象,那么虚拟机是进行了自动装箱把基本类型包装成对象类型的,使用的方法是valueOf,打开Long的valueOf方法一看,若是传入的值大于-128小于127,就返回Long缓存池的对象,不然就使用构造方法new一个对象。因此当两个-127-128范围以外的相同的值进行==比较时,其实怎么都不会返回true的,由于他们的对象都是new出来的,反之则是从缓存中去除,都是true内存