内存管理

new 出来的都是放在堆里面的,这些都是变量

Student stu = new Student();

中的stu 是引用,存放在栈里面,引用的是堆里面变量的地址

常量池也是放在堆里面的

栈中存放

一些局部变量,和一些参数

使用栈帧存储

方法区存放

  1. 类的相关信息

  2. 方法的定义

  3. 静态变量

public class Demo2 {
    String str = "hckj";
    char[] ch = { 'a', 'b', 'c' };

    public static void main(String[] args) {
        Demo2 d = new Demo2();
        d.change(d.str, d.ch);
        System.out.println(d.str + "," + Arrays.toString(d.ch));

    }

    public void change(String str, char[] ch) {
        str = new String("abc");

        ch[0] = 'g';
    }
}

输出:

change方法中的参数String str也是引用类型,和传过来的实参是指向同一块堆内的地址,在方法中更改了形参引用的地址,但没有改变实参的引用地址,所以在main方法中的输出没有发生改变

最后更新于