转载: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() " 则是比价的是内容,有时候程序出错,有可能就是这些细节的地方弄错了,看着没什么区别,其实是不一样的,清楚了之后排错就更容易了(这个地方其实以前也知道不一样,但是很模糊,不是很清楚,现在终于弄清楚)。
注:此文章纯属个人观点,不喜勿喷,如有其它见解,欢迎留言,谢谢。