2017-04-09 6 views
-1

Konnte keine explizite Beschreibung dessen finden, was passiert, also dachte ich, ich würde dies in die Community bringen.Arithmetische Operation auf primitiven Klassenvariablen

Sind beide Ganzzahlen i und j während der Instantiierung leer, weil die Variable 'sum' leer ist?

Vielen Dank im Voraus!

+1

Siehe [* §4.12.5. Anfangswerte von Variablen *] (http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.12.5). – trashgod

+1

"Leer" oder genauer gesagt, sie waren 0. Java-Primitive sind niemals "leer", sie werden auf 0 (oder falsch) initialisiert.Referenzen können "null" sein, was auch nicht wirklich "leer" ist, null ist ein Wert. – markspace

+1

Um zu wiederholen, was Markspace sagte. In Java gibt es keine "leere" Variable oder kein leeres Feld. Jede Variable oder jedes Feld hat einen eindeutigen Wert *, wann immer Sie es beobachten können. Dieser Wert ist das Ergebnis einer eindeutigen Initialisierung (z. B. 'int foo = 42;') oder einer impliziten * Standardinitialisierung *. Entfernen Sie "leere Variable" aus Ihrem mentalen Modell und Ihrem Vokabular! –

Antwort

1
Temp obj = new Temp(); // creates an instance of object type Temp 

Hier Die Datenelemente i, j und sum werden auf 0 initialisiert

obj.i = 1; // assigns value of Temp data member, i to 1 
obj.j = 2; // assigns value of Temp data member, j to 2 

Beachten Sie, dass der Wert des Datenelements sum von Temp Objekt obj noch 0 ist.
Zu machen, sum = i + j, müssen Sie es zu initialisieren, wenn i und j initialisiert werden.

Schreiben Sie einfach obj.setSum() Methode den Wert von sum und obj.getSum() danach, um den aktualisierten Wert davon retrive.

public class Temp { 
    static int i; 
    int j; 
    int sum = i+j; 

    public void setSum(){ 
     sum = i + j; 
    } 
    public int getSum(){ 
     return sum; 
    } 

} 


public class Main{ 
    public static void main(String[] args){ 

    Temp obj = new Temp(); 
    obj.i = 1; 
    obj.j = 2; 
    obj.setSum(); 
    System.out.println(obj.sum); //OR obj.getSum() 

    } 
} 
0

Ist es, weil beide ganzen Zahlen i und j während der Instanziierung leer waren, dass die ‚Summe‘ Variable leer ist?

Ja, i+j ist 'sum' zugeordnet, wenn das Objekt instanziiert wird. Standardmäßig weisen Sie 0 bis int Werte zu, wenn Sie keinen Wert zuweisen.

Sie müssen die sum Variable aktualisieren, indem Sie den Wert direkt zuweisen.

obj.i = 1; 
obj.j = 2; 
obj.sum = obj.i + obj.j. 

Eine Abhilfe ist eine Getter-Methode in Ihrem Temp-Klasse anstelle der variablen sum zu erstellen:

public class Temp { 

    static int i; 
    int j; 

    public int getSum() { 
     return i + j; 
    } 
} 

dann die Summe drucken:

System.out.println(obj.getSum()); 
0

Wenn Sie erstellen eine andere Klasse, die

numerische Datenfelder gesetzt Verwendung durch das Hauptverfahren wird Null

Zeichenfelder gesetzt werden Unicode \u0000

Boolesche Felder gesetzt sind zu false

Felder, die Objektreferenzen sind, werden auffestgelegtoder (leer) zum Beispiel

Verwandte Themen