Java堆、栈和常量池以及相关String的详细讲解
2016-06-24 17:57
441 查看
转载:http://www.cnblogs.com/xiohao/p/4296088.html
在java中,对象的引用是存在栈中,而对象的实例却是存在堆中;
在java中,栈中的对象可以共享;
在java中,八种基本数据类型是直接存在栈中的;
在java中,包装类数据的对象实例是存在堆中,对象的引用才是存在栈中,其实和一般的类对象一样。但是Integer类型的包装有点不同,当Integer取值在-128到127时,它的内部是按基本数据类型int来存放的,当他超过-128到127时则是和类对象一样;
在java中,还有一个特别的包装类String,当String = "abc" 时感觉有点类似基本数据类型的保存方式,不同于基本数据类型的是,String = "abc" 是保存在常量池中,而基本数据类型则是保存在栈中,但String = "abc" 同样也可以共享对象引用,而String = new String("abc") 时又跟类对象差不多,对象的实例也是存在堆中,但是对象的引用却是存在常量池中,而且可以和 String = "abc" 的对象引用共享;
在java中," == " 和 " equals() " 是不一样的," == " 比较的是引用地址,而 " equals() " 则是比价的是内容,有时候程序出错,有可能就是这些细节的地方弄错了,看着没什么区别,其实是不一样的,清楚了之后排错就更容易了(这个地方其实以前也知道不一样,但是很模糊,不是很清楚,现在终于弄清楚)。
注:此文章纯属个人观点,不喜勿喷,如有其它见解,欢迎留言,谢谢。
一、前言
感觉相当不错,所以做个记录,什么时候忘记了在温习温习,嘿嘿。二、再次记录
看了好几遍,把自己看了好久,想了好久才懂才理解一点的地方再次记录一下,毕竟好记性不如烂笔头嘛。在java中,对象的引用是存在栈中,而对象的实例却是存在堆中;
在java中,栈中的对象可以共享;
在java中,八种基本数据类型是直接存在栈中的;
在java中,包装类数据的对象实例是存在堆中,对象的引用才是存在栈中,其实和一般的类对象一样。但是Integer类型的包装有点不同,当Integer取值在-128到127时,它的内部是按基本数据类型int来存放的,当他超过-128到127时则是和类对象一样;
在java中,还有一个特别的包装类String,当String = "abc" 时感觉有点类似基本数据类型的保存方式,不同于基本数据类型的是,String = "abc" 是保存在常量池中,而基本数据类型则是保存在栈中,但String = "abc" 同样也可以共享对象引用,而String = new String("abc") 时又跟类对象差不多,对象的实例也是存在堆中,但是对象的引用却是存在常量池中,而且可以和 String = "abc" 的对象引用共享;
在java中," == " 和 " equals() " 是不一样的," == " 比较的是引用地址,而 " equals() " 则是比价的是内容,有时候程序出错,有可能就是这些细节的地方弄错了,看着没什么区别,其实是不一样的,清楚了之后排错就更容易了(这个地方其实以前也知道不一样,但是很模糊,不是很清楚,现在终于弄清楚)。
注:此文章纯属个人观点,不喜勿喷,如有其它见解,欢迎留言,谢谢。
相关文章推荐
- C++基于栈实现铁轨问题
- 浅析C语言中堆和栈的区别
- C语言栈的表示与实现实例详解
- C语言实现颠倒栈的方法
- 算法系列15天速成 第十天 栈
- 一看就懂:图解C#中的值类型、引用类型、栈、堆、ref、out
- Array栈方法和队列方法的特点说明
- java数据结构之java实现栈
- 浅析栈区和堆区内存分配的区别
- 用Java代码实现栈数据结构的基本方法归纳
- 用PHP解决的一个栈的面试题
- 浅谈C#中堆和栈的区别(附上图解)
- JavaScript数据结构与算法之栈详解
- C语言之栈和堆(Stack && Heap)的优缺点及其使用区别
- Python实现栈的方法
- JavaScript数组的栈方法与队列方法详解
- JavaScript数据结构与算法之栈与队列
- JavaScipt中栈的实现方法
- Java中堆和栈的区别详解
- 详解Java的堆内存与栈内存的存储机制