黑马程序员技术交流社区
标题:
对日历的一个疑问?
[打印本页]
作者:
严露华
时间:
2013-5-20 12:49
标题:
对日历的一个疑问?
本帖最后由 刘胜寒 于 2013-5-23 20:11 编辑
import java.util.*;
public class Lianxi {
public static void main(String[] args) {
String s = date();
System.out.println(s);
}
public static String date(){
Calendar c =Calendar.getInstance();
StringBuilder sb = new StringBuilder(); //定义一个容器,将遍历到的星期加进容器中
String[] weeks = {
"","日","一","二","三","四","五","六"}; //定义一个数组,获取对应的星期
for(int i=1900;i<2300;i++){
for(int j=0;j<=11;j++){
c.set(i, j, 13);
int index = c.get(Calendar.DAY_OF_WEEK);
sb.append(weeks[index]);//这一句代码不打印任何结果
//sb.append(weeks[index+" "); 这一句也不打印任何结果
//sb.append(weeks[index+"\t"]);那么为什么当加入了“\t”时,却会打印结果?
}
}
return sb.toString();
}
复制代码
疑问在代码里,一直都想不明白这个问题,求解答?谢谢
作者:
黑马伍哲沂
时间:
2013-5-20 14:04
经过我漫无边际的想象和猜测,我觉得原因是这样的。具体分析在代码注释中:
public class Test {
public static void main(String[] args) {
String s = date();
System.out.println(s);
}
public static String date() {
Calendar c = Calendar.getInstance();
StringBuilder sb = new StringBuilder();
String[] weeks = { "", "日", "一", "二", "三", "四", "五", "六" };
for (int i = 1900; i < 2300; i++) {// 我验证过将2300改成1950发现是有打印结果的。分析见下面。
for (int j = 0; j <= 11; j++) {
c.set(i, j, 13);
int index = c.get(Calendar.DAY_OF_WEEK);
sb.append(weeks[index] + " ");//
// sb.append(weeks[index]+" ");
// 因为这里的" "(这个是字符串),字符串之间的连接会频繁的新建String对象。
// 这些新建的对象gc无法及时回收,出现了传说中的内存泄露(应该是这个词吧?- -)
// sb.append(weeks[index]+"\t"]);我试过\t和\n都没问题,因为这里没有涉及到新建对象,
// 内存中自始至终 就只有sb。
}
}
return sb.toString();
}
}
复制代码
作者:
Jacky_Chen1990
时间:
2013-5-20 14:24
本帖最后由 Jacky_Chen1990 于 2013-5-20 14:33 编辑
那就抢个板凳吧。。
楼上答得好。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2