biginteger.valueof()返回缓存的对象



我编写了一个测试代码以检查平等。我已经检查了Java Doc,它说BigInteger是不可变的。检查静态出厂方法valueOf的文档看起来好像返回已经缓存的不变实例。那么,为什么==当其缓存实例时返回false。

以下是BigInteger中的valueOf的Java Doc:

返回一个大整数,其价值等于指定的价值 长的。此"静态工厂方法"优先于 (长)构造函数,因为它允许重复使用经常使用的 bigintegers。

以下代码进入无限循环。

public static void main(String[] args) {
    while(true) {
        BigInteger a = BigInteger.valueOf(100);
        BigInteger c = BigInteger.valueOf(100);
        if (a == c) {
            break;
        }
 }

不变的意味着该值在实例化后不会改变。

具体来说,这并不意味着JVM必须确保您创建的每个值只有一个副本。您可以创建许多具有相同内部状态的不变对象,但它们仍然是不同的对象。将这些与==进行比较将返回false,而equals()将返回true

biginteger是一个参考变量,与int或double不同,是原始变量。这意味着您不能像INT或双打一样使用" =="。相反,您必须使用.equals(),类似于用字符串的方式。

请参阅Biginteger的来源:

//如果-max_constant<Val<max_constant,返回库存常数

和max_constant是16

==检查参考而不是实际内容。因此,通常与原始数据类型(如int,float等)一起使用,每当您更新现有值时,它都不会被修改,而是将创建一个新的值。因此,在您的示例中,即使两者在物理上都是相同的对象,他们的引用值都不同。

最新更新