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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 严露华 中级黑马   /  2013-5-20 12:49  /  975 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 刘胜寒 于 2013-5-23 20:11 编辑
  1. import java.util.*;

  2. public class Lianxi {

  3.         public static void main(String[] args) {
  4.                
  5.                 String s = date();
  6.                 System.out.println(s);

  7.                 }
  8.         public static String date(){
  9.                 Calendar c =Calendar.getInstance();
  10.                 StringBuilder sb = new StringBuilder();   //定义一个容器,将遍历到的星期加进容器中

  11.                 String[] weeks = {
  12.                                                 "","日","一","二","三","四","五","六"};                                        //定义一个数组,获取对应的星期
  13.                 for(int i=1900;i<2300;i++){
  14.                         for(int j=0;j<=11;j++){
  15.                                 c.set(i, j, 13);
  16.                                 
  17.                                 int index = c.get(Calendar.DAY_OF_WEEK);
  18.                                 
  19.                                 sb.append(weeks[index]);//这一句代码不打印任何结果
  20.                                 //sb.append(weeks[index+" ");   这一句也不打印任何结果
  21.                                //sb.append(weeks[index+"\t"]);那么为什么当加入了“\t”时,却会打印结果?
  22.                         }
  23.                         
  24.                         
  25.                         }
  26.                 return sb.toString();
  27.                
  28.         }
复制代码
疑问在代码里,一直都想不明白这个问题,求解答?谢谢

点评

楼主的代码真神奇!!!  发表于 2013-5-20 18:40

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

2 个回复

倒序浏览
经过我漫无边际的想象和猜测,我觉得原因是这样的。具体分析在代码注释中:
  1. public class Test {
  2.         public static void main(String[] args) {

  3.                 String s = date();
  4.                 System.out.println(s);

  5.         }
  6.         public static String date() {
  7.                 Calendar c = Calendar.getInstance();
  8.                 StringBuilder sb = new StringBuilder();
  9.                 String[] weeks = { "", "日", "一", "二", "三", "四", "五", "六" };
  10.                 for (int i = 1900; i < 2300; i++) {// 我验证过将2300改成1950发现是有打印结果的。分析见下面。
  11.                         for (int j = 0; j <= 11; j++) {
  12.                                 c.set(i, j, 13);
  13.                                 int index = c.get(Calendar.DAY_OF_WEEK);
  14.                                 sb.append(weeks[index] + " ");//
  15.                                 // sb.append(weeks[index]+" ");
  16.                                 // 因为这里的" "(这个是字符串),字符串之间的连接会频繁的新建String对象。
  17.                                 // 这些新建的对象gc无法及时回收,出现了传说中的内存泄露(应该是这个词吧?- -)
  18.                                 // sb.append(weeks[index]+"\t"]);我试过\t和\n都没问题,因为这里没有涉及到新建对象,
  19.                                 // 内存中自始至终 就只有sb。
  20.                         }
  21.                 }
  22.                 return sb.toString();
  23.         }
  24. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 Jacky_Chen1990 于 2013-5-20 14:33 编辑

那就抢个板凳吧。。

楼上答得好。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马