2017-04-09 18 views
-1

何が起こっているのかについての明示的な説明を見つけることができなかったので、これをコミュニティに持ち込むと思った。プリミティブクラス変数の算術演算

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


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

Temp obj = new Temp(); 
obj.i = 1; 
obj.j = 2; 
System.out.println(obj.sum); //returns '0' 

}} 

'sum'変数が空であることをインスタンス化時に整数iとjの両方が空だったからですか?

ありがとうございます!

+1

[*§4.12.5を参照してください。変数の初期値*](http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.12.5)を参照してください。 – trashgod

+1

"空"またはより正確には0でした。Javaプリミティブは決して "空"ではなく、0(または偽)に初期化されます。参照は 'null 'でもかまいません。実際には"空 "でもなく、nullも値です。 – markspace

+1

マークスペースが何を言っているかを書き返す。 Javaには "空の"変数やフィールドはありません。すべての変数またはフィールドは、いつでも見ることができる*一定の値*を持ちます。その値は、明確な初期化(例えば 'int foo = 42;')または暗黙の*デフォルト初期化*のいずれかの結果です。あなたの精神モデルとあなたの語彙から "空の変数"を削除してください! –

答えて

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

、データメンバー、ij、およびsumは0に初期化されます

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

一時オブジェクトobjのデータメンバsumの値がまだ0であることに留意されたいです。
sum = i + jを作成するには、ijを初期化するときに、i + jに初期化する必要があります。

sumobj.getSum()の値を設定して更新値を取得するだけで、obj.setSum()メソッドを書き込むだけです。

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

'sum'変数が空であることをインスタンス化中に整数iとjが両方とも空であるとしますか?

はい、i+jは、オブジェクトがインスタンス化されるときに「sum」に割り当てられます。デフォルトでは、値を割り当てないときは0からintの値にJavaが割り当てられます。

sum変数に値を直接割り当てて更新する必要があります。

public class Temp { 

    static int i; 
    int j; 

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

次に合計を印刷するには:

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

この問題を回避するには、代わりに変数sumのご一時クラスでgetterメソッドを作成することです

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

あなたは

数値データフィールドはブール型フィールドが設定されている

ユニコード\u0000に設定されているゼロ

文字フィールドに設定されている主な方法によって使用されます別のクラスを作成する場合〜false

オブジェクト参照のフィールドはに設定されていますまたは(空白)たとえば、String data fields