public static void main(String[] args) {
Integer i = 1;
Integer i1 = 1;
Integer j = 3333;
Integer j1 = 3333;
System.out.println(i == i1);
System.out.println(j == j1);
System.out.println(j.equals(j1));
/**
* 输出结果
* true
* false
* true
*
* 字节码指令
* iconst_1
* 1 invokestatic #13 <java/lang/Integer.valueOf : (I)Ljava/lang/Integer;>
* 4 astore_1
* 5 iconst_1
* 6 invokestatic #13 <java/lang/Integer.valueOf : (I)Ljava/lang/Integer;>
* 9 astore_2
* 10 sipush 3333
* 13 invokestatic #13 <java/lang/Integer.valueOf : (I)Ljava/lang/Integer;>
* 16 astore_3
* 17 sipush 3333
* 20 invokestatic #13 <java/lang/Integer.valueOf : (I)Ljava/lang/Integer;>
* 23 astore 4
*
* 包装类型赋值的时候,会走一个方法valueOf--差不多是亨元模式,他维护了一个常量池,如果是在-128-127之间是直接引用,
* 不然是new对象,new的两个对象new Integer(1) != new Integer(1),类似于字符串
*
* public static Integer valueOf(int i) {
* if (i >= IntegerCache.low && i <= IntegerCache.high)
* return IntegerCache.cache[i + (-IntegerCache.low)];
* return new Integer(i);
* }
*/
}
包装类型不建议==比较
最新推荐文章于 2024-10-10 09:56:47 发布