2011-01-04 13 views
2

Ich möchte nur sicherstellen, dass ich klar darüber bin, da ich mir des genauen Verhaltens nicht ganz sicher bin. Ich habe zwei Arrays:Zeiger auf das gleiche Array in Java

private short[] bufferA; 
private short[] bufferB; 

, die ich zwischen tauschen möchte. Kann ich das so etwas wie:

private short[] currentBuffer; 

while(something) 
    { 
    currentBuffer = (condition) ? bufferA : bufferB; 
    modify(currentBuffer); 
    } 

die bufferA oder bufferB abhängig von einem gewissen Zustand zu ändern, oder sollte ich Flags verwenden und es manuell wie diesen Code:

private int currentBuffer; 

while(something){ 
    currentBuffer = (condition) ? BUFFER_A : BUFFER_B; 
    if(currentBuffer == BUFFER_A) { 
    modify(bufferA); 
    }else{ 
    modify(bufferB); 
    } 
} 

Der Code ich arbeite mit ist komplexer als dieses vereinfachte Beispiel, also wenn ich es auf die erste Weise tun könnte, wäre das sehr bevorzugt.

Antwort

2

Ihr erstes Beispiel sollte gut funktionieren.

3

Ja, Sie können. Verweise auf Arrays sind wie alle anderen Referenzen.

1

Der erste Weg funktioniert gut mit Arrays (oder anderen Containern).

Sie können jedoch keine Variablen zuweisen, nur um ihre Inhalte ändern:

int myVar = someCondition ? myInt1 : myInt2; 
// this has no effect on either myInt1 or myInt2 
myVar = 1000; 

Die hier Grund ist, dass Java alles von Wert übergibt, einschließlich Referenzen.

Wenn Sie also einen Verweis auf einen Container an einer anderen Stelle übergeben, kann dieser Code den Inhalt des Containers ändern und der Code sieht die Änderungen.

1

Beide sind allrite .. Sie voran mit dem ersten Weg gehen .. EDIT: als eine Randnotiz, Referenzen in Java sind mehr wie Zeiger in C++ als Referenzen in C++. Natürlich gibt es noch einige Unterschiede zwischen Java-Referenzen und C++ - Zeigern, z. u kann in c Pointer-Arithmetik tun ++ ..