Java内存分配

Java内存分配
程序运行时,内存可以分成四块
一块用来装代码,就是编译后的内容
一块用来装静态的内容static
一块是,stack,用来装变量的,就是我们声明的各种类型的变量,也就是赋值号左边的内容
一块是,heap,装的是new出来的内容
基本数据类型:变量和值存储在栈中
引用数据类型:变量是存储在栈中,真正的值是存储在堆中,也就是通过new关键字创建出的内容都存储在堆中
栈中变量存储的是堆中内存的地址
Java参数
java形参看做是方法的局部变量,每次方法被调用时,都会针对形参在内存中申请空间,方法执行结束后,该内存空间被回收
不管是基本数据类型作为参数还是引用数据类型作为参数,都是将栈中变量所存储的内容复制一份,传递给方法中的形参
int num= 1;
object.show(num);//

Student s = new Student();
object.show(s); //将s中存储的地址传递给方法中的形参,s和方法中的形参指向同一个堆内存
如果在方法内改变基本数据类型的值,当方法结束后,不会影响传参之前的变量值
如果改变引用数据类型的属性值,当方法结束后,会影响传参之前的对象的属性值

public class Test02 {
public int[] show(int[] nums){
nums[1] =2;

nums = new int[2]; //new 重新申请堆内存空间,方法结束被回收
nums[0]=3;
nums[1]=4;

return nums;
}

public static void main(String[] args) {
Test02 test02 =new Test02();
int[] nums =new int[2];
nums[0] = 1;
int[] nums1=test02.show(nums);
System.out.println(nums[1]);
System.out.println(nums1[1]);
}

}

原文地址:https://www.cnblogs.com/longmo666/p/13555296.html