💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
### 内存分配 成员变量在堆内存里.局部变量在栈内存里(基础类型).如果是对象,那么变量在栈里.存储的数据在堆里. ### 疑惑 既然成员变量存在于对象中,对象存在于堆中,所以成员变量存在于堆中。那么按照这样的推理,局部变量存在于方法中,而方法存在于对象中,对象存在于堆中,那是不是可以说局部变量存在于堆中? ### 理解 当对象new出来,实体存在于堆,对象的成员变量已经在堆上分配空间,但对象里面的方法是没有出现的,只出现方法的声明,方法里面的局部变量并没有创建。等到对象调用此方法时,为了加快运行的速度,方法中的局部变量才会在栈中创建,所以,方法中的局部变量是在栈内的。 当然需要注意的是类变量(静态变量)存在于方法区!!引用类型的局部变量声明在栈,存储在堆 . 内存:栈 1.存放局部变量 2.不可以被多个线程共享 3.空间连续,速度快 堆 1.存放对象 2.可以被多个线程共享 3.空间不连续,速度慢,但是灵活  方法区 1.存放类的信息:代码、静态变量、字符串常量等等 2.可以被多个线程共享 3.空间不连续,速度慢,但是灵活 总的来说:我们先来记住两条黄金法则: 1.引用类型总是被分配到“堆”上。不论是成员变量还是局部 2.基础类型总是分配到它声明的地方:成员变量在堆内存里,局部变量在栈内存里。