2016-03-24 14 views
0
public class StaticVar { 
//example of a static method 
static int val=1024;//static variable 
//a static method 
static int valDividedTwo(){ 
    return val/2; 
} 
} 
class SDemo{ 
public static void main(String[]args){ 
    //this is StaticVar.val which is equal to 1024 
    System.out.println("Val is" +StaticVar.val); 
    //thi sis the val/2 
    System.out.println("StaticVar.ValDiv2 =" +StaticVar.valDividedTwo()); 
    StaticVar.val=4; 
    System.out.println("val is "+StaticVar.val); 
    System.out.println("val is "+StaticVar.valDividedTwo()); 
    System.out.println("val is "+StaticVar.val); 
} 
} 

私の質問はSystem.out.println("val is "+StaticVar.val);の直後の最初の文章は、明らかに出力は4です。また、なぜSystem.out.println("val is "+StaticVar.valDividedTwo());が2であるのも分かりますが、混乱しているのは、その後の文がSystem.out.println("val is "+StaticVar.val);であるということです。静的変数としては2となるでしょうか?ここで何が起こっているのですか?静的変数に関して混乱していますか?

+2

'return val/2;'は 'val'を変更しません。 'val'の半分の新しい値を返します。 –

+0

ああ、ちょうどその値を返しますか? – eli

+0

'valDividedTwo()'によって返される値は 'val'に設定されていないので、同じままです。 – Ramanlfc

答えて

2

あなたはsysoutでvalの値を変更していません。計算を実行してから答えを印刷するだけです。

valの値を変更するには、valを計算と等しく設定してから、その値を出力する必要があります。

また、この問題は静的ではありません。 "final"と "static"の違いを調べることができます。これは、javaで新入社員を混乱させる可能性があります。

関連する問題