Evaluierungsreighenfolge

Status
Nicht offen für weitere Antworten.
T

tuxedo

Gast
Hallo,

folgendes Szenario: Ich habe eine überschriebene write() Methode eines OutputStreams. In dieser Methode möchte ich die Daten vor dem weiterschreiben in einen anderen Stream erst bearbeiten (process()). Dabei sollten die eingehenden Daten in "b" von process() bearbeitet werden und wieder in "b" landen...

Bisher hab ich folgendes gemacht:


Code:
@Override
	public void write(byte[] b, int off, int len) throws IOException {
		int processed = process(b,off,len); 
		mOut.write(b,off,processed);
	}


Aber würde auch folgendes gehen:

Code:
@Override
	public void write(byte[] b, int off, int len) throws IOException {
		mOut.write(b,off,process(b,off,len));
	}

Hier würde ich mir einmal das "new" sparen. Jedoch weiß ich jetzt nicht, ob welchen Kontext "b", welcher als erster Parameter bei "mOut.write()" auftaucht, hat. Wird zuerst process() ausgeführt so dass dieser erster Parameter "b" der write() Methode schon das bearbeitete "b" ist, oder wird hier das "unbearbeitete b" verwendet ???

Ich kann grad noch nicht ausprobieren. Aber vielleicht weiß einer wie der Compiler hier arbeitet...

- Alex
 

Wildcard

Top Contributor
Geht natürlich von innen nach aussen, ob du dadurch allerdings etwas sparst sei mal dahin gestellt :wink:
 
M

maki

Gast
In Java werden alle Variablen per Wert übergeben, bei "b" handelt es sich um eine Referenz auf ein Array.

D.h., der Inhalt von dem Array b wird(?) schon bei prozess verändert, danach wird der veränderte Inhalt von write weiterbenutzt.
 
T

tuxedo

Gast
k, danke für die Info

@Wildcard:

Naja,ich spare mir ein "new" ... Ob jetzt der Compiler intern da was drum rum baut und dennoch irgendwie Speicher allokieren muss weiß ich nicht. Aber jedenfalls hab ich's vermieden. Der Rest ist Compilersache ;-) Einen spürbaren Unterschied gibt's vermutlich wohl nicht. Aber wie heisst's doch: Kleinvieh macht auch Mist.

- Alex
 
T

tuxedo

Gast
Stimmt... ach.. int braucht ja kein new...

Wird bei dem neu anlegen eines int kein Speicher allokiert?

- Alex
 

Wildcard

Top Contributor
Das wird ja nicht 'neu angelegt'. Ob du das Ding jetzt auf ein lokales handle packst oder als Parameter übergibst dürfte Jacke wie Hose sein. Wenn nicht, dann kümmert sich sowieso der Compiler darum :wink:
 
T

tuxedo

Gast
Okay... Und in einer Zeile siehts auch netter aus ;-) Aber das ist ja dann Geschmackssache.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben