今天爱分享给大家带来java中 堆栈的区别【面试题详解】,希望能够帮助到大家。
栈Stack
存储局部变量
是存放方法的局部变量的内存空间,每个方法都会分配一块空间
栈内存中的值可以共享
对于引用类型,Stack里面保存的是指向对象的内存地址(引用)
程序在栈内存中运行
堆Heap
存储new出来的数组或对象
在JVM内存中,所有线程共享堆内存,而每个线程都有自己的栈。
//对象会被分配到堆内存中 String str1 = new String("abc"); //变量会被分配到栈内存中 //在栈中创建对象的引用str2,然后查找栈中有没有存放“abc”, //如果没有,则将“abc”存放进栈,并将str2指向“abc”,如果已经有“abc”, 则直接将str2指向“abc”。 String str2 = "abc";
String str1 = new String("abc"); String str2 = new String("abc"); System.out.println(str1 == str2); String str3 = "abc"; String str4 = "abc"; System.out.println(str3 == str4);
上面代码输出的结果是
str1 == str2:false
str3 == str4:true