String的存储地址 String str1 = "abc";String str2 = new String("abc");谁能详细分析下str1和str2中abc的存储地址,以及他们的存储方式,是怎么指向的,它们是不是同一个abc?谢谢了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不是同一个abc,用System.out.print(str1 == str2);就知道了.其他问题等待高手回答. 反正不是一个abc 具体的还真不太清楚 可能一个存在常量池 一个存在堆里吧 不一样new String("abc"); 常量池"abc 堆 可以上网查一下,我也不清楚了忘记了 太深奥了。。要寻汇编语言估计才知道这些。。但是两个"abc"绝对不是同一个,new一个类的时候是把它复制一份到自己这里。如果是一个那还了得啊。。那不是每个类修改了abc之后,别人用的时候就不是abc了。 String str1 = "abc"; 是放在常量池中(常量池应该在perm区)String str2 = new String("abc"); 是直接在heap中申请空间引用都是在堆栈中存放,指向内存中的对象,两个abc不是一个对象 看这个你就明白了。http://blog.csdn.net/ZangXT/archive/2009/05/19/4201979.aspx String str1="abc";这里的“abc”是字符串常量 是放在常量池中的String str2=new String("abc");是在堆中分配空间而str1个str2都只是引用 即str1指向常量池中的区域而str2指向堆内存中的区域str1==str2为false String str="name",String str2 = new String ("name");str 先会在一个叫常量池中查找是否有一个值为name的常量str存在!如果不存在就会放入一个!只创建一个对象!而str2先会在常量也中查找!如果有值为name的常量就会引用!不会再创建!然后再在堆中new 一个对象出来!也就是说创建了两个对象! 他们不是同一个 地址 你试试这: String a = "abc"; String b = new String("abc"); if(a == b)System.out.println("a和b地址相等"); 注意,我们这里的 "==" 并不是判断值是否相等,是判断两个对象里面的地址是否相等. 这里你就知道了~ 其实每一个 String 都是一个对象 你 new 了,自然会生成一个新的对象,所谓新的对象,最起码的,它们的地址不会相等~ 函数fun1抛了异常,函数fun2调用了fun1没有try catch也没有指出throws 怎么没报错 程序访问页面求救!!! java重写javascript的正则表达式类(原创分享) 请教两个数学问题,有点难度 一个奇怪的数据初始化问题 JDBCF问题 为什么这个圆不向下跑呀,不知道哪里写错了,帮帮忙 JB9,真烦!!!!!!!!!!! 急急急! java下载运行不了 做了个程序 老师说没有任何用处 怎么让JFrame不能通过拖动鼠标改变大小?
"abc 堆 可以上网查一下,我也不清楚了忘记了
是放在常量池中(常量池应该在perm区)
String str2 = new String("abc");
是直接在heap中申请空间
引用都是在堆栈中存放,指向内存中的对象,两个abc不是一个对象
http://blog.csdn.net/ZangXT/archive/2009/05/19/4201979.aspx
String str2=new String("abc");是在堆中分配空间
而str1个str2都只是引用 即str1指向常量池中的区域
而str2指向堆内存中的区域
str1==str2为false
str 先会在一个叫常量池中查找是否有一个值为name的常量str存在!如果不存在就会放入一个!
只创建一个对象!而str2先会在常量也中查找!如果有值为name的常量就会引用!不会再创建!然后再
在堆中new 一个对象出来!也就是说创建了两个对象!
你试试这: String a = "abc"; String b = new String("abc");
if(a == b)System.out.println("a和b地址相等");
注意,我们这里的 "==" 并不是判断值是否相等,是判断两个对象里面的地址是否相等.
这里你就知道了~
其实每一个 String 都是一个对象
你 new 了,自然会生成一个新的对象,所谓新的对象,最起码的,它们的地址不会相等~