首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

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

2012-09-20 
一道Java笔试题,能详细说明下结果吗 List不懂private static List String getList(){List String

一道Java笔试题,能详细说明下结果吗 List不懂
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);
}

[解决办法]
首先要清楚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
[解决办法]

Java code
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);    }} 

热点排行