一道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);
}
}