栈内存和堆内存

来源:互联网 发布:我的世界卡java设置 编辑:程序博客网 时间:2024/06/17 03:36

在java中,内存实际分为栈内存和堆内存,当我们定义一个类的引用变量时,这个引用变量就放在栈了内存中,对象的变量数据实际就放在堆内存中,而栈内存中的引用变量是指向堆内存的对象的。eg:

int[] a = {1, 2, 3, 4};当我们定义一个数组引用变量a时,字符a就会储存在栈内存中,而实际的对象1, 2, 3, 4就是催存在堆内存中,栈内存中a是指向对内存的1, 2, 3, 4的。所以如果使一个与a相同类的数组引用变量b等于a,就等于改变了栈内存中b在堆内存中的指向,所以在使用b引用元素时就等于使用a引用元素;而原本b在堆内存存储的数据如果没有新的引用变量指向他的话就会变成垃圾,被系统清理掉。

public class Array{public static void main(String[] args){int[] a = {1, 2, 3, 4};int[] b = new int[3];//堆内存中的对象是0, 0, 0/** * 1, 2, 3, 4放置在堆内存中 * a, b 放置在栈内存中,且a指向堆内存中的1, 2, 3, 4 * 当b = a时,b放弃原来在堆内存的指向,而选择指向堆内存的1, 2, 3, 4,b原来在堆内存指向的数据变为垃圾 */b = a;for(int c: b){System.out.println(c);}}}
但如果是不同类的引用变量,一般是不能改变指向的,double[] d = new double[4];d是不能等于a的。

0 0
原创粉丝点击