M
Mani_X
Gast
Hallo,
mal ne ganz blöde Frage:
Singletons liefern ja immer nur ein und diesselbe Instanz einer Klasse zurück
( Singleton (Entwurfsmuster) auf Wikipedia )?!
Nun folgender Code:
Ausgabe:
Liefert hier die BigDecimal Add Methode ein neues Objekt zurück? Also, die Referenz in b1 und b2 wird mit einem neuen Pointer überschrieben (nach der Ausgabe zu urteilen müssten es ja 2 Referenzen sein)? BigDecimal]BigDecimal (Java 2 Platform SE 5.0) ) bechreibt "Returns a BigDecimal whose value is (this + augend), and whose scale is max(this.scale(), augend.scale())." Wenn sich das Objekt nicht ändert müsste ja System.out.println(); "Ref1 Ref1 1 2 2" ausgeben, oder?
Es ist mir wichtig in dem Fall ganz sicher zu sein. Wäre für eine Antwort sehr dankbar.
mal ne ganz blöde Frage:
Singletons liefern ja immer nur ein und diesselbe Instanz einer Klasse zurück
( Singleton (Entwurfsmuster) auf Wikipedia )?!
Nun folgender Code:
Java:
package de.test;
import java.math.BigDecimal;
public final class BigD
{
/**
* Privates Klassenattribut,
* wird beim erstmaligen Gebrauch (nicht beim Laden) der Klasse erzeugt
*/
private static BigDecimal instance;
/** Konstruktor ist privat, Klasse darf nicht von außen instanziiert werden. */
private BigD() {}
/**
* Statische Methode „getInstance()“ liefert die einzige Instanz der Klasse zurück.
* Ist synchronisiert und somit thread-sicher.
*/
public synchronized static BigDecimal getInstance()
{
if (instance == null)
{
instance = new BigDecimal("0");
}
return instance;
}
}
Java:
package de.test;
import java.math.BigDecimal;
import de.test.BigD;
public class SDFTest {
/**
* @param args
*/
public static void main(String[] args) {
BigDecimal b1 = BigD.getInstance();
BigDecimal b2 = BigD.getInstance();
System.out.println(Integer.toHexString(System.identityHashCode(b1)));
b1 = b1.add(BigDecimal.ONE);
System.out.println(Integer.toHexString(System.identityHashCode(b1)));
System.out.println(b1);
b2 = b2.add(BigDecimal.ONE);
System.out.println(b1.toString());
System.out.println(b2.toString());
}
}
Ausgabe:
Java:
50a9ae05
33dff3a2
1
1
1
Liefert hier die BigDecimal Add Methode ein neues Objekt zurück? Also, die Referenz in b1 und b2 wird mit einem neuen Pointer überschrieben (nach der Ausgabe zu urteilen müssten es ja 2 Referenzen sein)? BigDecimal]BigDecimal (Java 2 Platform SE 5.0) ) bechreibt "Returns a BigDecimal whose value is (this + augend), and whose scale is max(this.scale(), augend.scale())." Wenn sich das Objekt nicht ändert müsste ja System.out.println(); "Ref1 Ref1 1 2 2" ausgeben, oder?
Es ist mir wichtig in dem Fall ganz sicher zu sein. Wäre für eine Antwort sehr dankbar.
Zuletzt bearbeitet von einem Moderator: