2016-05-18 8 views
2
public class Theft{ 
    private String[] time =new String[4]; 
    public String[] getTime() { 
    return time = Arrays.copyOf(time, 4); 
    } 

    public void setTime(String[] time) { 
    this.time = time; 
    } 
} 

WennWarum diebstahl.getTime() [0] = "aaa" + diebstahl.getTimie() [0] den Wert nicht ändern?

laufen
Theft theft =new Theft(); 
theft.getTime()[0]="sss"; 
theft.getTime()[0]="aaa"+theft.getTime()[0]; 
System.out.println(theft.getTime()[0]); 

Warum es nicht gedruckt werden "sss" nicht "aaasss"? Der Wert scheint sich nicht geändert zu haben.

Antwort

2

Weil Sie jedes Mal eine Kopie davon erstellen.

public class Theft { 
    private String[] time = new String[4]; 

    public String[] getTime() { 
     return time; // Return the time itself, not a copy 
    } 

    public void setTime(String[] time) { 
     this.time = time; 
    } 
} 

Ausgang: aaasss

0

Diese Linie

theft.getTime()[0]="aaa"+theft.getTime()[0]; 

hat ein paar Dinge auf einmal los. Lassen Sie uns brechen sie in separaten Anweisungen, so dass es einfacher ist, zu folgen:

String[] time1 = theft.getTime(); 
String[] time2 = theft.getTime(); 
String newValue = "aaa"+time2[0]; 
time1[0] = newValue; 

Wie Sie sehen können, das Array, das die time1 aktualisiert wird, die bereits durch seine Kopie ersetzt wurde, time2. Daher wird das Update effektiv verworfen.