Kann der New-Operator eine bekannte Referenz zurückgeben

Hallo Forumsgemeinschaft,
ist es möglich das ein Constructor bzw new-Operator eine vorhandene Referenz zurückgibt anstatt eine neue?
Da ich nicht weis ob meine Frage verständlich formuliert ist folgt ein Beispiel:

public final class MyNumber{
	public final static  MyNumber ZERO=new MyNumber(0.0);
	double mynum;
	public MyNumber(double d){
		if(d==0.0)return ZERO;     //<-Sowas in der Richtung
		mynum=d;
	}

	public static void main(String[] args) {
	System.out.println(new MyNumber(0.0)==ZERO);  //true	
	}
}

Ist sowas Möglich?
(mir ist bewusst das man solch ein Effekt durch Factorys nachbilden kann)

MFG Melfis

Nein, das geht nichtso einfach.

Worum geht es denn genau?
Falls es ums testen geht, gibt es diverse Mocking Frameworks die den new Operator umbiegen koennen.
Fuer Prodcode nimmt man da eine Factory bzw. ein DI Framework.

Nein, es wird immer ein neues Objekt im Speicher angelegt. Die übliche Vorgehensweise in solchen Fällen ist, eine Factory-Methode zu verwenden:

public final class MyNumber{
    public final static  MyNumber ZERO=new MyNumber(0.0);
    private double mynum;

    //Konstruktor nicht öffentlich
    private MyNumber(double d){ 
        mynum=d;
    }
  
    //Factory-Methode übernimmt die Rolle des Konstruktors
    public static MyNumber createMyNumber(double d) {  
        return d == 0.0 ? ZERO : new MyNumber(d);
    }
 
    public static void main(String[] args) {
    System.out.println(createMyNumber(0.0)==ZERO);  //true   
    }
}

Wie Landei’s Ansatz funzt es auch im JRE. Schau dir mal Integer.valueOf(…) an.

Ein Konstruktor ist immer void und kann keine return Anweisung beinhalten. Dein Code würde so nicht mal kompilieren.

@maki : Es war mehr ein Gedankenspiel als ein konkreter Fall. Ich habe Immutable-Objects die ich vergleichen will. equals müsste bei einer genauen Prüfung ca. 20 Werte vergleichen. Der Objecttype kommt relativ häufig vor und muss oft auf “Zero” geprüft werden, deswegen dachte ich ein Referenzvergleich wäre schneller.
So hab ich mir überlegt wie ich das realisieren kann, in diesem Zuge kamm die oben beschriebene Frage auf.

@Landei : So hab ich es auch momentan implementiert. Ich wollte eigentlich nur wissen ob das Referenz-Constructor-Ding möglich ist, trozdem Danke. Wird anderen Lesern des Threads sicher Helfen.

@deetee : Wie bei dir nicht? Muss an der SDK liegen, benutzte Java 8 102b :o)

Nochmal Danke an alle.
So neben bei, wo kann ich ein Thema als erledigt markieren? (im F.A.Q. steht nix dazu)

MFG Melfis

Direkt unter dem Thread, Button “Thread Closed” (zumindest auf Englisch…)

Ach so, das ist ein neues “Feature” in Java 8? Wie heisst das?

@Marco13 : Ich benutze das Peanut Layout. Hab es da nicht gefunden. Ich teste es mal in der Spielewiese oder so. :confused:

@deetee : Das Feature heisst Humor/Ironie, steht nicht direkt drin, sondern zwischen den Zeilen;)

Bei mir heisst der „thread schliessen“…