概括而言,java有6个地方可以存储数据:
[list]
[*]寄存器:存储最快的地方[/list]
[list]
[*]堆heap:一般new个对象的时候,将对象的数据存储在堆栈中,包括数组的new[/list]
[list]
[*]栈stack:速度比堆快,声明的变量存储在栈中,不过有区别,变量会把数值也存储在一起,但对象就会再在堆栈中划个区域保存数据,即栈中的对象引用堆中的数值[/list]
[list]
[*]静态存储:static标识的数据,不包括对象[/list]
[list]
[*]常量存储:存储常量[/list]
[list]
[*]硬盘存储:常见的2个例子是流对象和持久化对象[/list]
了解以上后,会对java的开发有很大帮助,特别是传值的操作,"call by value"和"call by referrence".
例子:
[list]
[*]寄存器:存储最快的地方[/list]
[list]
[*]堆heap:一般new个对象的时候,将对象的数据存储在堆栈中,包括数组的new[/list]
[list]
[*]栈stack:速度比堆快,声明的变量存储在栈中,不过有区别,变量会把数值也存储在一起,但对象就会再在堆栈中划个区域保存数据,即栈中的对象引用堆中的数值[/list]
[list]
[*]静态存储:static标识的数据,不包括对象[/list]
[list]
[*]常量存储:存储常量[/list]
[list]
[*]硬盘存储:常见的2个例子是流对象和持久化对象[/list]
了解以上后,会对java的开发有很大帮助,特别是传值的操作,"call by value"和"call by referrence".
例子:
public class Test {
private int a;//get(),set()省略
private int b;//get(),set()省略
public Test(){
a = 20;
b = 30;
}
public void change(int i){
i = 10;
}
public void changeTest(Test test){
test = new Test();
}
public void changeTestValue(Test test){
test.setA(6);
test.setB(7);
}
public static void main(String[] args) {
int c = 1;//测试变量传值
Test test = new Test();//无意思,只是让它调用方法
Test test1 = new Test();//测试对象传值
test1.setA(1);
test1.setB(2);
Test test2 = new Test();//测试对象传值
test.change(c);
test.changeTest(test1);
test.changeTestValue(test2);
System.out.println(c);//result: 1
System.out.println(test1.getA() + "," + test1.getB());//result: 1,2
System.out.println(test2.getA() + "," + test2.getB());//result: 6,7
}
}