`

栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)

阅读更多
栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)

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)有什么区别

    "Java 中堆(heap)和堆栈(stack)的区别" Java 中堆(heap)和堆栈(stack)是两个不同的内存区域,...了解堆栈(stack)和堆(heap)的区别对于 Java 编程非常重要,可以帮助我们更好地理解 Java 的内存管理机制。

    c语言stack(栈)和heap(堆)的使用详解

    1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据...

    堆(heap)与栈(stack)的区别

    非常经典的资料,准确描述了C语言中,堆和栈之间的区别!是深入理解C语言的好材料

    用java实现的栈Stack类

    用java实现的栈Stack类,不继承任何集合类,用对象数组实现

    关于Java栈与堆的思考-

    栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。

    java 栈和堆,Java自动管理栈和堆

    栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。

    heap和stack区别详解

    heap与stack 的区别, 讲解的很详细了 小细节需要把握仔细了

    基于java中stack与heap的区别,java中的垃圾回收机制的相关介绍

    本篇文章小编将为大家介绍,基于java中stack与heap的区别,java中的垃圾回收机制的相关介绍,需要的可以参考一下

    堆(heap)和栈(stack)的区别

    一、预备知识—程序的内存分配 二、例子程序 3.windows进程中的内存结构

    java中堆和栈的区别.pdf

    Java中堆和栈的区别 Java是一种面向对象的编程语言,它的内存管理机制是自动化的,程序员不需要手动地分配和释放内存。Java中堆和栈是两个重要的概念,它们都是Java用于在RAM中存放数据的地方。 栈(Stack)是一块...

    stack&heap

    1,堆和栈存储; 2,堆和栈用法; 3,堆和栈管理; 4,堆和栈区别;

    局部变量与全局变量区别,栈、堆和静态存储区的区别[借鉴].pdf

    局部变量与全局变量区别、栈、堆和静态存储区的区别 变量是编程语言中最基本的概念之一,它们可以存储不同的数据类型,并在程序中发挥着重要的作用。在 C++ 中,变量根据定义位置的不同,具有不同的作用域,可以...

    C语言stack和heap

    C/C++语言 stack和heap代码 .c文件 适用于linux ubuntu unix等平台 terminal中操作

    Java中的堆和栈[定义].pdf

    Java 中的堆和栈 Java 中的堆和栈是 Java 语言中两个重要的内存区域,它们扮演着不同的角色,管理着 Java 程序中的内存分配和释放。 堆(Heap) 堆是一个运行时数据区,用于存放由 new 创建的对象和数组。Java ...

    Stack-栈实例

    栈的实现,Stack栈使用符号进出 静态栈,与链表栈的实例

    heap and stack

    heap and stack 深入讲解heap and stack 深入讲解heap and stack 深入讲解heap and stack 深入讲解heap and stack 深入讲解heap and stack 深入讲解

    Java基础知识点 - 内容比较全面

    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

    数据结构 严蔚敏 栈 stack

    栈的Java语言实现

    栈的顺序存储结构及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 = ...

Global site tag (gtag.js) - Google Analytics