一道Java笔试题,能详细说明下结果吗 List不懂

lijin860725 2012-09-10 11:41:11
private static List < String > getList(){
List < String > list = new ArrayList();
StringBuffer str = new StringBuffer();
for (int i = 0;i < 2;i++) {
list.add(str.append(i).toString());
}
return list;
}
public static void main(String[] args) {
String returnValue = "";
List < String > listFromDb = getList();
List < String > list = new ArrayList();
list = listFromDb;
for (int i = 0;i < listFromDb.size();i++) {
String str = listFromDb.get(i);
StringBuffer strBuffer = new StringBuffer();
for (int j = 0;j < 2;j++) {
if (str.equals(strBuffer.append(j).toString())) {
list.add(strBuffer.append(j).toString());
break;
}
}
}
for (int i = 0;i < list.size();i++) {
returnValue += list.get(i);
}
System.out.println(returnValue);
}
...全文
97 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
蓝蜘蛛 2012-09-11
  • 打赏
  • 举报
回复
import java.util.ArrayList;
import java.util.List;

public class Test01 {

private static List<String> getList() {
List<String> list = new ArrayList();//新建一个
StringBuffer str = new StringBuffer();//stringbudder你就把他当成string就好
for (int i = 0; i < 2; i++) {//循环2次,i=0,i=1
list.add(str.append(i).toString());//list中俩个值 0和01
}
return list;
}

public static void main(String[] args) {
String returnValue = "";
List<String> listFromDb = getList();//listFromDb中俩个值0和01
List<String> list = new ArrayList();
list = listFromDb;//list和listFromDb指向同一个引用了,可以理解为他们是同一个“人”
for (int i = 0; i < listFromDb.size(); i++) {//size是大小,等于2
String str = listFromDb.get(i);//listFromDb中俩个值0和01
StringBuffer strBuffer = new StringBuffer();
for (int j = 0; j < 2; j++) {
if (str.equals(strBuffer.append(j).toString())) {
list.add(strBuffer.append(j).toString());
break;//应该就他是知识点了,break是跳出本循环就是直接又回到上面最近的那个
//for。而且j又从0开始,但是下面的那句strBuffer.append(j)可是一直在添加
//所以后边会有011
}
}
}
for (int i = 0; i < list.size(); i++) {
returnValue += list.get(i);//list4个值 0 01 00 011
}
System.out.println(returnValue);
}
}
freedom17711 2012-09-11
  • 打赏
  • 举报
回复
首先要清楚getList()这个函数得到的是一个包含什么样的list{"0";"01"}这是程序开始的时候listFromDb包含的内容,虽然list初始化了,但是由于这句代码list = listFromDb;这是一个引用的赋值,list和listFromDb都指向了同一块内存,所以后面对list的添加实际上就是对listFromDb的添加(list.add(strBuffer.append(j).toString());)
//在第一个大循环中,由于listFromDb的内容不断增加
//所以第一个循环实际上循环了4次
//在第一次和第二次循环进入add函数
for (int i = 0;i < listFromDb.size();i++) {
String str = listFromDb.get(i);
StringBuffer strBuffer = new StringBuffer();
for (int j = 0;j < 2;j++) {
if (str.equals(strBuffer.append(j).toString())) {
list.add(strBuffer.append(j).toString());
break;
}
}
}
我们可以得到{"0""01""00""011"}这个list
lijin860725 2012-09-11
  • 打赏
  • 举报
回复
呃,好啊
[Quote=引用 1 楼 的回复:]

你又来、、、、放在程序里debug跑一编不是很清楚。。。。这个没上次那个3言2语就能讲清除,我给你标个注释你自己去跑一编好不?
[/Quote]
蓝蜘蛛 2012-09-11
  • 打赏
  • 举报
回复
你又来、、、、放在程序里debug跑一编不是很清楚。。。。这个没上次那个3言2语就能讲清除,我给你标个注释你自己去跑一编好不?
lijin860725 2012-09-11
  • 打赏
  • 举报
回复
太感谢了~~~

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧