文章目录
主要区别:
例子: String str = new String(“hello”);
变量str放在栈上,用new创建出来的字符串对象放在堆上,而"hello"这个字面量是放在方法区的
创建了几个字符串对象?
两个对象,一个是静态区(方法区常量池)的”hello“字符串,一个是用new 创建在堆上的对象str。
1、栈区(stack)
- 由编译器自动分配释放,存放
函数的参数值,局部变量的值
等。其操作方式类似于数据结构中的栈。
每个线程都有一个栈区
2、堆区(heap)
- 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,
分配方式是类似于链表
。
所有线程共享一个堆区
详细说明:
1.申请方式不同:
栈区(stack):
由系统
<自动分配
。