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

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
------解决方案--------------------
探讨

"abc"和"cd"是常量,在java堆中
s是变量符号,在符号表中
s是String类型的引用,第一句执行完时,指向"abc",第二句执行完时指向"cd"

真实地址在哪问题看一下另一个帖子,刚才回答的
http://topic.csdn.net/u/20120514/23/a95f2c57-e0ff-47ab-9d5c-0d276013b21b.html?13871

------解决方案--------------------
探讨

"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想不相等都难了。
------解决方案--------------------
探讨
再问1楼
String s="abc";
String k="abc";
问:s==k s.equals(k) 有什么不同呢,

------解决方案--------------------
探讨
String s="abc";

abc 存放在String常量池中,不是堆也不是栈;
s 是一个字符串引用,指向abc所在的地址,s存放在栈中。

------解决方案--------------------
探讨
String s="abc";

abc 存放在String常量池中,不是堆也不是栈;
s 是一个字符串引用,指向abc所在的地址,s存放在栈中。

------解决方案--------------------
常量池就是指向的堆中的对象
------解决方案--------------------
探讨
引用:
String s="abc";

abc 存放在String常量池中,不是堆也不是栈;
s 是一个字符串引用,指向abc所在的地址,s存放在栈中。


请不要误导别人,常量池是在栈中的,s只是一个引用,不是只具体的地址

------解决方案--------------------
探讨

再问1楼
String s="abc";
String k="abc";
问:s==k s.equals(k) 有什么不同呢,

------解决方案--------------------
"abc"放在池中,变量s在栈中。
------解决方案--------------------
"abc"在堆中,s存储其地址,放在栈中
------解决方案--------------------
探讨
引用:

再问1楼
String s="abc";
String k="abc";
问:s==k s.equals(k) 有什么不同呢,

"=="当比较两个对象为同一个对象时返回true,Object类的equals方法是比较当两个变量指向同一个对象时才返回true,很显然Object类的equals方法不适合String,所以String类重写了Object类的e……