A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© sofeel 中级黑马   /  2015-3-1 21:53  /  1937 人查看  /  21 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

String s="";
for(in x=0;x<10;x++){
      s+=""+x;
}
System.out.println(s);
在这段程序中,s身上发生了什么?

21 个回复

倒序浏览
s="0123456789",又来水
回复 使用道具 举报
字符串的值不可以改变
String s="";
JVM首先找有没有""字符串,如果有把s指向它;如果没有就创建""对象到String常量池,然后把s指向它。(如果为null就不会创建)
同理每次用+连接字符串都要在String常量池创建新字符串。
for(in x=0;x<10;x++){
      s+=""+x;
}
最后结果为String类型的0123456789。

评分

参与人数 1黑马币 +20 收起 理由
张利强 + 20 回答的好详细,33个赞。。。

查看全部评分

回复 使用道具 举报
s在不断指向新的字符串,先把x转为字符串,然后和原来的s拼接为新字符串,把新字符串的引用再赋给s
回复 使用道具 举报
正在输入... 发表于 2015-3-1 22:06
字符串的值不可以改变
String s="";
JVM首先找有没有""字符串,如果有把s指向它;如果没有就创建""对象到St ...

回答的好详细,33个赞。。。
回复 使用道具 举报
张利强 发表于 2015-3-1 22:11
回答的好详细,33个赞。。。

谢谢补充, 谢谢土豪。:#
回复 使用道具 举报
正在输入... 发表于 2015-3-1 22:06
字符串的值不可以改变
String s="";
JVM首先找有没有""字符串,如果有把s指向它;如果没有就创建""对象到St ...

有道理。
请问,内存中,总共出现过那些对象,最后s指向的0123456789是一个对象吗
回复 使用道具 举报
shuren2015 发表于 2015-3-1 22:00
s="0123456789",又来水

额。。。。你怎么不看好这题呢。再说人家也有赚分的需求啊
回复 使用道具 举报
张利强 发表于 2015-3-1 22:11
回答的好详细,33个赞。。。

NB的土豪,你很慷慨!
但,我还是想问下:兄弟真的手没斗吗
回复 使用道具 举报
同意楼上的意见
回复 使用道具 举报
正在输入... 发表于 2015-3-1 22:15
谢谢补充, 谢谢土豪。

哥们,天上真掉馅饼啊
回复 使用道具 举报
sofeel 发表于 2015-3-1 22:17
有道理。
请问,内存中,总共出现过那些对象,最后s指向的0123456789是一个对象吗 ...

""是一个对象,“0"是,"01"是...    "0123456789"是。
回复 使用道具 举报
sofeel 发表于 2015-3-1 22:17
有道理。
请问,内存中,总共出现过那些对象,最后s指向的0123456789是一个对象吗 ...

网卡,没看见土豪的补充。问题了结了
回复 使用道具 举报
同上回复
回复 使用道具 举报
涨了点知识:lol
回复 使用道具 举报
sofeel 发表于 2015-3-1 22:27
哥们,天上真掉馅饼啊

我也不介意你送我的 :lol
回复 使用道具 举报
执梦而行 来自手机 中级黑马 2015-3-2 23:13:22
17#
顶3楼,好详细
回复 使用道具 举报
我直接用注释写了过程
  1. class Test1
  2. {
  3.         public static void main(String[] args)
  4.         {

  5.                         String s = "";//首先定义一个String类型对象s,并初始化为空字符串
  6.                         for(int x = 0; x < 10; x++)//定义一个int型变量x,并执行循环
  7.                         {
  8.                              s += "" + x; //个人觉得这里用 s += x;就可以了,那个""有点多余。
  9.                              //"+="其实是一步操作,但是这里可以分析拆开看
  10.                              //相当于 s = s + "" + x;这样做本质就是将int型的x加入到字符串中,将其转成字符串形式
  11.                              //此时字符串s就为上个字符串和当前int型数字x的合体了。
  12.                              //也就是把0-9串成一个字符串了
  13.                         }
  14.                         System.out.println(s);
  15.         }
  16. }
复制代码
回复 使用道具 举报 1 0
存在常量池中的是“0”。。到。。。“0123456789”这几个字符串吗?
回复 使用道具 举报
love$$-IT 发表于 2015-3-3 00:42
存在常量池中的是“0”。。到。。。“0123456789”这几个字符串吗?

是的。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马