我写了一个测试代码来检查相等性。我检查了Java文档,它说BigInteger
是不可变的。检查静态工厂方法valueOf
的文档,它看起来像返回已经缓存的不可变实例。那么为什么当它的缓存实例时==会返回false。BigInteger.ValueOf()返回缓存的对象?
下面是valueOf
在BigInteger
在Java文档:
返回一个大整数,其值等于指定 长。这种“静态工厂方法”优先于 (长)构造函数提供,因为它允许重复使用经常使用的BigIntegers BigIntegers。
下面的代码进入无限循环。
public static void main(String[] args) {
while(true) {
BigInteger a = BigInteger.valueOf(100);
BigInteger c = BigInteger.valueOf(100);
if (a == c) {
break;
}
}
''==测试为参考平等, '.equals()'测试值是否相等 – azurefrog
使用'equal()'检查是否相等。 – Li357
对于原始类型'=='比较值,但对于它比较引用的对象。 – Gendarme