https://www.liaoxuefeng.com/wiki/1252599548343744/1281319170474017#0
Integer没有重载“==”操作符,使用的是Object类的方式,比较内存地址。
public class Test {
public static void main(String[] args) {
Integer a = Integer.valueOf(520);
Integer b = Integer.valueOf(520);
System.out.printf("""
通过过Integer的静态工厂方法创建实例,但是超过缓存范围:
a == b : %b
因为Object类的equals方法比较的是对象地址。
""".formatted(a == b));
Integer c = Integer.valueOf(5);
Integer d = Integer.valueOf(5);
System.out.printf("""
通过过Integer的静态工厂方法创建实例,且在缓存范围内:
c == d : %b
因为返回的是同一个缓存,同一个静态Integer对象。
""".formatted(c == d));
Integer e = new Integer(5);
Integer f = new Integer(6);
System.out.println("""
通过Integer构造器创建实例:
e == d : %b
说明了静态工厂方法创建实例的灵活性。
""".formatted(e == f));
}
}
运行结果:
Integer.valueof():
如果在-128与127以内,c和d是同一个Integer对象: