JAva定数,変数,静的変数の理解
7259 ワード
最近試験で簡単な問題が出てきました.java定数、変数、静的変数に対する理解を見てみましょう.コードは以下の通りです.
出力結果:
a.aa.value =123
b.aa.value =123
======================== a.bb.value =321 b.bb.value =321 ######################### a.bb.value =654321 b.bb.value =654321 %%%%%%%%%%%%%%%%%%%%%%%%% a.bb.value =123456 b.bb.value =123456
このような簡単なコードは、多くの人が間違っていると答えています.その中には、3、4年間働いているjava開発者もいます.
単純な理解:定数:jvmの観点から、定数プール内の静的変数です.すべてのインスタンスが共有するメモリです.1つのインスタンスが値を変更します.他のインスタンスも変数を変更します.各インスタンスが作成されると、変数にメモリが割り当てられます.100のインスタンスを作成します.それは100の変数メモリです.千のインスタンスを作成すると、千の変数メモリになります.
public class TestVar {
/**
* JAVA , , ,
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
A a = new A();
A b = new A();
System.out.println("a.aa.value =" + a.aa);
System.out.println("b.aa.value =" + b.aa);
System.out.println("========================");
System.out.println("a.bb.value =" + a.bb);
System.out.println("b.bb.value =" + b.bb);
System.out.println("#########################");
a.bb = "654321";
System.out.println("a.bb.value =" + a.bb);
System.out.println("b.bb.value =" + b.bb);
System.out.println("%%%%%%%%%%%%%%%%%%%%%%%%%");
b.bb = "123456";
System.out.println("a.bb.value =" + a.bb);
System.out.println("b.bb.value =" + b.bb);
}
}
class A {
public static final String aa = "123";// aa
public static String bb = "321";// bb
public String cc = "666";// cc
}
出力結果:
a.aa.value =123
b.aa.value =123
======================== a.bb.value =321 b.bb.value =321 ######################### a.bb.value =654321 b.bb.value =654321 %%%%%%%%%%%%%%%%%%%%%%%%% a.bb.value =123456 b.bb.value =123456
このような簡単なコードは、多くの人が間違っていると答えています.その中には、3、4年間働いているjava開発者もいます.
単純な理解:定数:jvmの観点から、定数プール内の静的変数です.すべてのインスタンスが共有するメモリです.1つのインスタンスが値を変更します.他のインスタンスも変数を変更します.各インスタンスが作成されると、変数にメモリが割り当てられます.100のインスタンスを作成します.それは100の変数メモリです.千のインスタンスを作成すると、千の変数メモリになります.