为什么==如果在java中对值非引用进行整数检查,则与新运算符的大小写不同
正如我们所知,如果对象指向同一引用,则==返回true,否则返回false
所以,如果我
Integer a = new Integer("1"); // Creating Integer Object a
Integer b = new Integer("1"); // Creating Integer Object b
然后执行a==b,然后返回true 但它们都有不同的参考文献
你可以在下面搜索框中键入要查询的问题!
正如我们所知,如果对象指向同一引用,则==返回true,否则返回false
所以,如果我
Integer a = new Integer("1"); // Creating Integer Object a
Integer b = new Integer("1"); // Creating Integer Object b
然后执行a==b,然后返回true 但它们都有不同的参考文献
# 1 楼答案
JVM缓存-127到127之间的整数值
这就是为什么==适用于此范围之间的整数值
但是:
# 2 楼答案
如果您在
Integer
类中检查equals方法实现,它是:从这里你可以看到它使用“==”运算符
现在是它背后的原因。最终,您必须比较Integer包装器类的值,这将由于Java中的自动装箱和取消装箱而自动发生
从方法定义中,您还可以看到它正在使用
((Integer)obj).intValue()
检索传递的Object
值# 3 楼答案
阿萨米特·巴蒂(asAmit Bhati)在我们写作时回答说:“让我更详细地解释一下。”
jvm创建两个独立的对象,并将它们与“==”进行比较,结果为false。但当我们编写以下代码时:
这将转化为:
valueOf方法的实现如下(在java 1.8中):
正如您所看到的,如果该值介于-128和最大缓存值之间(可以使用这个jvm参数-Djava.lang.Integer.IntegerCache.high配置),它将检索缓存值,并且不会创建Integer的新实例,这就是为什么(=)对某些值返回true
还要注意同样适用于字符包装类,但不适用于Float和Double类