首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

搞不清楚,真真真解决方法

2013-03-12 
搞不清楚,真真真在java中,String a123String bnew String(123)为什么他们所引用的地址不同呢?请用

搞不清楚,真真真
在java中,String a="123";  String b=new String("123");为什么他们所引用的地址不同呢?请用堆和栈来解释。
[解决办法]
a是栈内变量,它的内存保存的是常量池的常量字符串对象对象"123"的地址
b是栈内变量,它的内存保存的是堆中的new String对象的地址,new String在堆中生成对象,并用常量池的字符串对象"123"初始化堆中的对象,所以堆中的对象的内存的内容和常量池对象的内存的内容一样,但是是不同的两个对象
[解决办法]
首先要分清楚java的内存机制了,总共分为三种,也即堆、栈、方法区。
堆:连续的内存空间,用于存放new出来的东西
栈:不连续的内存空间,用于存放局部变量。
方法去:存放成员变量、类代码、静态语句块。
a变量表示的在栈区,b变量存放在堆区。不知道你理解了没?
[解决办法]
附加题:

从内存的角度,堆和栈有什么不同呢?为什么要如此区分?

热点排行