#equals比较本地debug,沙箱环境和部署正式服务器后比较结果不一致
#map.get("num").equals(1) 沙箱和本地 为true, 正式环境比较为false。从equals特性上来讲,代码有问题,双方数据类型不一致,一个是Object,一个是Integer,后续也是toString解决了这个bug,那为什么本地比较为true
equals方法是先判断是否是同一类型,如果不是就不会再往下比较值,直接返回false了
另外如果equals方法没有重写的话,是调用的Object类中的equals方法即进行==的比较
可能是因为在本地和沙箱环境中,Java会对自动装箱做一些优化,而在部署的正式服务器上,这种优化可能不会发生。
在Java中,当一个基本数据类型被赋值给一个对象类型时,会发生自动装箱(Autoboxing)操作,将基本数据类型转换成对象类型,这个过程也称为装箱。而当一个对象类型被赋值给一个基本数据类型时,会发生自动拆箱(Unboxing)操作,将对象类型转换成基本数据类型,这个过程也称为拆箱。
在进行自动装箱时,Java会使用一个内部的缓存,来避免创建大量的包装对象。如果两个相同类型的包装对象的值相等,那么它们实际上指向的是同一个对象。因此,当比较两个包装对象的值相等时,Java会先比较它们是否是同一个对象,如果是,那么比较结果为true。
而在部署的正式服务器上,可能由于不同的JVM实现或不同的JVM参数设置,这种自动装箱的优化可能不会发生,因此会出现比较结果不一致的情况。