BigInteger中如果valueof两个对象相加创建一个新的对象比较的不是地址值吗,它的优化不是只有-16~16吗,为什么200也是true。
//5.两数相加,是创建一个新的对象
BigInteger db6 = BigInteger.valueOf(200);
BigInteger db7 = BigInteger.valueOf(0);
BigInteger db8 = db6.add(db7);
//此处比较的是具体值
System.out.println(db6 == db8); // true
看源码就知道了,当你add的值是0的时候,返回的是它本身
chatgpt:
这段代码中,创建了两个 BigInteger 类型的对象 db6 和 db7,分别用 BigInteger.valueOf(200) 和 BigInteger.valueOf(0) 来初始化。然后使用 add() 方法将 db6 和 db7 相加,结果赋值给了新的 BigInteger 对象 db8。
在最后一行代码中,使用 == 运算符比较 db6 和 db8 是否是同一个对象,即它们在内存中的地址是否相同。因为 db8 是通过相加创建的新对象,所以它和 db6 在内存中的地址不同。但是 BigInteger 类型实现了 equals() 方法,因此可以使用 equals() 方法判断 db6 和 db8 的值是否相等:
System.out.println(db6.equals(db8)); // true
这样比较的结果应该为 true,因为 db6 和 db8 的值相等,都是 200。