JAva定数,変数,静的変数の理解

7259 ワード

最近試験で簡単な問題が出てきました.java定数、変数、静的変数に対する理解を見てみましょう.コードは以下の通りです.

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の変数メモリです.千のインスタンスを作成すると、千の変数メモリになります.