您的位置:首页 > 编程语言 > Java开发

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() " 则是比价的是内容,有时候程序出错,有可能就是这些细节的地方弄错了,看着没什么区别,其实是不一样的,清楚了之后排错就更容易了(这个地方其实以前也知道不一样,但是很模糊,不是很清楚,现在终于弄清楚)。

注:此文章纯属个人观点,不喜勿喷,如有其它见解,欢迎留言,谢谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息