String 存取值小问题,在线等
java中
String s="abc";
s="cd";
现问:(1)s abc分别是在堆中,还是在栈中呢
(2)s是用是地址吗,哪里用上了地址
thanks
------解决方案--------------------String s="abc";
abc 存放在String常量池中,不是堆也不是栈;
s 是一个字符串引用,指向abc所在的地址,s存放在栈中。
------解决方案--------------------1.s在栈中,abc在堆中
2.s不是地址,只是一个指向abc字符串的一个引用而已。
------解决方案--------------------"abc"和"cd"是常量,在java堆中
s是变量符号,在符号表中
s是String类型的引用,第一句执行完时,指向"abc",第二句执行完时指向"cd"
真实地址在哪问题看一下另一个帖子,刚才回答的
http://topic.csdn.net/u/20120514/23/a95f2c57-e0ff-47ab-9d5c-0d276013b21b.html?13871
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------String s="abc";
String k="abc";
1、s==k 比较的是二者的地址,它们都指向abc的地址;而abc只有一个,就是在池中的那个,所以s==k 返回true
2、s.equals(k) 自然比较的是字符串是否相等,这里地址都相等了,那equals想不相等都难了。
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------常量池就是指向的堆中的对象
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------"abc"放在池中,变量s在栈中。
------解决方案--------------------"abc"在堆中,s存储其地址,放在栈中
------解决方案--------------------