Когда вы делаете что-то вроде этогоBigDecimal bigDecimal = BigDecimal.ONE;
BigDecimal bigDecimal = BigDecimal.ONE;
почему BigDecimal стать новым объектом?
Когда вы делаете что-то вроде этогоBigDecimal bigDecimal = BigDecimal.ONE;
BigDecimal bigDecimal = BigDecimal.ONE;
почему BigDecimal стать новым объектом?
В этом случае переменная (или поле) bigDecimal
не станет новым объектом. Это только ссылка на объект, на который ссылается существующее статическое поле java.math.BigDecimal.ONE
.
Сам объект (тот, который представляет 1
) создается только один раз: при загрузке класса BigDecimal
. Для Java 7 это делается с использованием new BigDecimal(BigInteger.ONE, 1, 0, 1)
.
Назначение, которое вы сделали, лучше, чем создание нового объекта самостоятельно, используя = new BigDecimal(...)
, поскольку существующий объект повторно используется.
Извините, но я не понимаю, если вы тогда bigDecimal = bigDecimal.add (BigDecimal.ONE); то bigDecimal будет = 2 – user3234625
'BigDecimal' неизменен, поэтому, когда вы назначаете' bigDecimal = bigDecimal.add (BigDecimal.ONE) 'новый объект возвращается из метода' add' (т.е. 'add' не изменяет ссылку на 'BigDecimal.ONE'). – Cascader
Точнее, это ссылка на тот же объект, на который ссылается существующее статическое поле 'BigDecimal.ONE'. (То есть, это ссылка на объект, а не на поле.) – yshavit
Новый объект не назначен. bigDecimal
относится к тому же объекту, что и BigDecimal.ONE
.
Если вы позже сделать
bigDecimal = bigDecimal.add(BigDecimal.ONE);
ссылка на другой объект (который имеет значение 2) будет назначен bigDecimal
. После этого заявления bigDecimal
и BigDecimal.ONE
больше не указывают на тот же объект.
OK, но когда вы bigDecimal = bigDecimal.add (BigDecimal.ONE); Затем BigDecimal 2 (только протестированы с BigDecimal BigDecimal = BigDecimal.ONE; System.out.println (BigDecimal); BigDecimal = bigDecimal.add (BigDecimal.ONE); System.out.println (BigDecimal) мощность: 2 – user3234625
От Java Документация
общественности статической окончательный BigDecimal ONE
Значение 1, с масштабом 0.
Тогда ONE является статическим и является тот же экземпляр объекта на тот же контекст загрузчика классов.
Сравните два с == ('bigDecimal и' BigDecimal.ONE') - он вернет true, что означает, что базовый объект тот же. – berry120
Почему вы верите в это. –