栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)
来源:互联网 发布:matlab遗传算法选址 编辑:程序博客网 时间:2024/05/17 01:40
转自:
http://primer-2004.javaeye.com/blog/125434
1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。 String str = "abc";和String str = new String("abc");和char[] c = {'a','b','c'};String str=new String(c);都采用堆存储 String str = "abc";在栈中如果没有存放值为"abc"的地址,等同于: 关于String str = "abc"的内部工作。Java内部将此语句转化为以下几个步骤: 使用String str = "abc";的方式,可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。而对于String str = new String("abc");的代码,则一概在堆中创建新对象,而不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。 char[] c = {'a','b','c'};String str=new String(c);等同于:
2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
3. Java中的数据类型有两种。基本类型(primitive types), 共有8种,即int, short, long, byte, float, double, boolean, char。存在于栈中。另一种是包装类数据,如Integer, String, Double等将相应的基本数据类型包装起来的类。这些类数据全部存在于堆中.
String temp=new String("abc");
String str=temp;
(1)先定义一个名为str的对String类的对象引用变量:String str;
(2)在栈中查找有没有存放值为"abc"的地址,如果没有,则开辟一个存放字面值为"abc"的地址,接着创建一个新的String类的对象o,并将o的字符串值指向这个地址,而且在栈中这个地址旁边记下这个引用的对象o。如果已经有了值为"abc"的地址,则查找对象o,并返回o的地址。
(3)将str指向对象o的地址。
String str = new String('a'+'b'+'c');
- 栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)
- 栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)
- 栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)
- 栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)
- 栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)
- 栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)
- 堆(heap)与栈(stack)的区别
- 堆Heap与栈Stack的区别
- 堆(heap)与栈(stack)的区别
- java的栈(stack)与堆(heap)
- 堆(heap)与栈(stack)的区别
- 堆(heap)与栈(stack)的区别
- 栈(stack)与堆(Heap)的区别
- 堆与栈的区别(stack&heap)
- Java 堆(heap)栈(stack) 的区别
- java栈stack和堆heap的工作原理,用途及区别?举例说明
- java栈stack和堆heap的工作原理,用途及区别?举例说明
- stack与heap的区别(转载)
- Setting an Accessible Name for an Image Button
- linux内核之——丢包分析
- S3c2440A WINCE平台HIVE注册表+binfs的实现
- 从2.4 到2.6:Linux 内核可装载模块机制的改变对设备驱动的影响
- [经验随笔]其实可以做的更好(一)
- 栈(stack)与堆(heap)区别以及Java的string变量赋值的内部工作机制(精典转载贴)
- 天鸣科技笔试
- UTF-8与UNICODE的关系及代码转换
- 让你的对象支持事务
- Unicode和UTF-8之间的转换详解
- enum (忘记了重新练手)
- python起步
- 信息处理基本原理-起点
- JS操作JSON