日期:2014-05-20  浏览次数:20651 次

String类?谢谢回答
语句:String s="hello"不是没有new出对象,应该在“数据区(segment)”是么?

为什么又说“每个String对象的内容实际上都是保存在堆内存之中”?不是矛盾了么,谢谢

------解决方案--------------------
String s="hello"
首先JVM在常量区(堆内存中)中找有没有"hello"
如果没有则在常量区中创建一个String对象保存"hello"
再把这个对象的引用给对象s
------解决方案--------------------
http://topic.csdn.net/u/20120607/07/9d3a5948-ca38-4eb9-a4f8-63400b34e13a.html

不多说,不解释
------解决方案--------------------
http://blog.csdn.net/mjhwy/article/details/7732661
相信你看完这,一定会明白的
------解决方案--------------------
这个String类最特别!java 中的共享机制会这样做。
比如 你定义了一个int a = 3;java会在栈中开辟一个空间存3,当你在定义一个int b=3时 java先搜索栈区找到有一个3了,直接把b指向a的内存区,这样就节省空间了。
再说一个String。 String s = "XXX" 和String s = new String("XXX")的区别,你只要记住,凡是new出来的绝对会在堆里建对象。 对于一个String对象,里面必然有一块区域指向常量区,也就是说常量区存着这个"XXX" 当你用String s = “XXX” 是情况就显而易见了 "XXX"就是一个字符串常量,这种方法也会在常量区生成XXX 但和new出来的 不是一个。假如你再String s1 = “XXX” 那么 这个xxx就和s的xxx一样了 和int a int b一样的道理。 因为 new的对象 是封装起来的 你看不到或者说java 看不到里面的常量是什么,它只负责去生成。