Java把内存划分为两种:栈内存,和堆内存。
栈内存:
在函数中定义的基本类型变量和对象的引用变量都在函数的栈内存中分配。
堆内存:
用来存放由new创建的对象和数组以及对象的实例变量。
package storage;
public class StorageTest {
public static void swap(int a,int b){
int t = a;
a = b;
b = t;
System.out.println("swap中 a:"+a+",b:"+b);
}
public static class DataSwap{
int a;
int b;
public String toString(){
return "a:"+a+",b:"+b;
}
}
private static void swap(DataSwap data) {
int t = data.a;
data.a = data.b;
data.b = t;
}
// 数组逆置
private static void inverse(String[] array) {
for(int i=0;i<array.length/2;i++){
String temp = array[i];
array[i] = array[array.length-i-1];
array[array.length-i-1] = temp;
}
}
public static void main(String[] args) {
int a = 6,b = 9;
swap(a,b);
// 基本类型变量和对象的引用变量在函数中使用栈内存分配
System.out.println("main中 a:"+a+",b:"+b);
DataSwap data = new DataSwap();
data.a = 4;
data.b = 5;
// swap(data); //交换成功
// 堆内存用来存放new创建的对象和数组以及对象的实例变量
// System.out.println(data.toString());
DataSwap p = data;
swap(p);
// 实际上操作的也是 data
System.out.println("p中: "+p.toString());
System.out.println("data中: "+data.toString());
String array[]={"a","b","c","d"};
// 逆置 array 数组
inverse(array);
System.out.println(array[0]);
}
}
输出:
data和p对象是引用变量,实际操作的是堆内存中的实例数据。