es gibt hier zwei Arten von Speicher, zum Einen feste 4 Byte für die Variable, wenn sie auf ein Objekt zeigt,
und dann noch wenige bis tausende oder noch mehr Bytes für Objekte, z.B. ein Array int[4000]
die Variable hat mit dem Objekt-Speicherbedarf wenig zu tun,
Object o = null; // vielleicht 4 Bytes reserviert
o = "sdfkldjdflkj"; // der String wird vielleicht irgendwo mit 20 Bytes angelegt, das interessiert die Variable o aber wenig
o = new int[30000]; // irgendwo wird ein Array mit viel viel Speicherplatz angelegt, interessiert o aber doch nicht
int[] x = (int[]) o; // x ist wieder nur eine Variable/ eine Referenz mit 4 Byte, zeigt aber dennoch auf das große Array,
double d = 0; // double und long benötigten 8 Byte