1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。
2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
3. Java中的数据类型有两种。基本类型(primitive types), 共有8种,即int, short, long, byte, float, double, boolean, char。存在于栈中。另一种是包装类数据,如Integer, String, Double等将相应的基本数据类型包装起来的类。这些类数据全部存在于堆中.
String str = "abc";和String str = new String("abc");和char[] c = {'a','b','c'};String str=new String(c);都采用堆存储
String str = "abc";在栈中如果没有存放值为"abc"的地址,等同于:
String temp=new String("abc");
String str=temp;
关于String str = "abc"的内部工作。Java内部将此语句转化为以下几个步骤:
(1)先定义一个名为str的对String类的对象引用变量:String str;
(2)在栈中查找有没有存放值为"abc"的地址,如果没有,则开辟一个存放字面值为"abc"的地址,接着创建一个新的String类的对象o,并将o的字符串值指向这个地址,而且在栈中这个地址旁边记下这个引用的对象o。如果已经有了值为"abc"的地址,则查找对象o,并返回o的地址。
(3)将str指向对象o的地址。
使用String str = "abc";的方式,可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。而对于String str = new String("abc");的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。
char[] c = {'a','b','c'};String str=new String(c);等同于:
String str = new String('a'+'b'+'c');
***********************************************************************************
*转贴:http://community.csdn.net/Expert/topic/4848/4848360.xml?*temp=9.325808E-02
*看完之后真正的明白了,感谢! 和大家一起分享!!
***********************************************************************************
相关推荐
java中堆(heap)和堆栈(stack)有什么区别
1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据...
非常经典的资料,准确描述了C语言中,堆和栈之间的区别!是深入理解C语言的好材料
用java实现的栈Stack类,不继承任何集合类,用对象数组实现
栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
heap与stack 的区别, 讲解的很详细了 小细节需要把握仔细了
本篇文章小编将为大家介绍,基于java中stack与heap的区别,java中的垃圾回收机制的相关介绍,需要的可以参考一下
一、预备知识—程序的内存分配 二、例子程序 3.windows进程中的内存结构
1,堆和栈存储; 2,堆和栈用法; 3,堆和栈管理; 4,堆和栈区别;
C/C++语言 stack和heap代码 .c文件 适用于linux ubuntu unix等平台 terminal中操作
栈的实现,Stack栈使用符号进出 静态栈,与链表栈的实例
heap and stack 深入讲解heap and stack 深入讲解heap and stack 深入讲解heap and stack 深入讲解heap and stack 深入讲解heap and stack 深入讲解
1.8 Java中Heap与Stack的区别 1.9 Java中String和StringBuffer的区别 1.10 Java中Comparable和Comparator实现对象比较 1.11 Java中的JNDI (Java命名与目录接口) 1.12 Java事件处理机制与“恋爱关系” 1.13 ...
数据结构 严蔚敏 栈 stack
栈的顺序存储结构及Java实现 //MyStack.java public class MyStack { int MAX_SIZE = 100; int top; String[] stack; public void init(String[] array){ stack = new String[100]; top = -1; for (int i = ...
UDP 协议栈 IP。V1.3 - ARP timeout and ability to reset the ARP IP/MAC cache Migration notes: v1.2 to v1.3 - UDP_complete_nomac and IP_Complete_nomac have generics to specify clock rate and ARP time...
本篇文章主要介绍了什么是栈(Stack) 、什么是堆( Heap),以及栈和堆的优缺点,同时介绍了应该什么时候使用堆和栈,有需要的朋友可以参考下
stack栈,如何使用栈,如何学好栈就下载此文档,很全的,谢谢啦,数据结构与算法!!!