當你做這樣的事情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
之後不再指向同一個對象。
好的,但是當你bigDecimal = bigDecimal.add(BigDecimal.ONE); 的System.out.println(BIGDECIMAL); BIGDECIMAL = bigDecimal.add(BigDecimal.ONE); 的System.out.println(BIGDECIMAL然後BIGDECIMAL是2(只是 的BigDecimal BIGDECIMAL = BigDecimal.ONE測試); 輸出: 2 – user3234625
從Java文檔
公共靜態最終的BigDecimal ONE
值1,具有0
然後ONE是靜態的並且是相同的實例對象上的刻度相同的類加載器上下文。
比較兩個==('bigDecimal和'BigDecimal.ONE') - 它會返回true,這意味着底層對象是相同的。 – berry120
你爲什麼相信它的確如此。 –