Integer a = 127; //Integer.valueOf(127)
Integer b = 127; //Integer.valueOf(127)
log.info(a == b); // true
Integer c = 128; //Integer.valueOf(128)
Integer d = 128; //Integer.valueOf(128)
log.info(c == d); //false
Integer e = 127; //Integer.valueOf(127)
Integer f = new Integer(127); //new instance
log.info(e == f); //false
Integer g = new Integer(127); //new instance
Integer h = new Integer(127); //new instance
log.info(g == h); //false
Integer i = 128;
int j = 128;
log.info(i == j); //true
谁知道以上是为什么呀
https://www.cnblogs.com/ryelqy/p/11014766.html
这个文章解释了为啥127行,128不行
Integer也是封装对象,值相等判断还是用equals吧
在java中,==比较的是两个对象是否相同
Integer是一个包装类,进入源码可以看到,其中封装了一个IntegerCache,缓存了-128 ~ 127的Integer,说白了,你用valueOf创建的数,只要在这个范围内,就会使用缓存,即a == b,用new创建则不会使用缓存,即g != h
至于i == j是因为int和Integer比较时,Integer会拆箱成int
Integer 是int的封装对象。int是基本类型。
如果你直接赋值 值在-128到127之间 Integer是不会直接创建对象 而是丢在栈里面这个时候可以==
如果你是new的不管你多少 都要用.equals 因为这样会直接创建一个对象 对象是无法用==的