import java.util.ArrayList;
import java.util.List;public class TestA {
public static void main(String[] args) {
new TestA().abc();
new TestA().abcd();
} public void abc(){
List<TestB> list=new ArrayList();
TestB testB=null;
int i=2;
while(i-->0){
testB=new TestB();
testB.setA("hello,"+i);
list.add(testB);
}
for (TestB testB2 : list) {
System.out.println(testB2.getA());
}
}
public void abcd(){
List<TestB> list=new ArrayList();
TestB testB=new TestB();
int i=2;
while(i-->0){
testB.setA("hello,"+i);
list.add(testB);
}
for (TestB testB2 : list) {
System.out.println(testB2.getA());
}
}
}
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
import java.util.List;public class TestB{
String a="";
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
}各位帮忙看一下,为什么运行结果是
hello,1
hello,0
hello,0
hello,0我觉得应该是
hello,1
hello,0
hello,1
hello,0
import java.util.List;public class TestA {
public static void main(String[] args) {
new TestA().abc();
new TestA().abcd();
} public void abc(){
List<TestB> list=new ArrayList();
TestB testB=null;
int i=2;
while(i-->0){
testB=new TestB();
testB.setA("hello,"+i);
list.add(testB);
}
for (TestB testB2 : list) {
System.out.println(testB2.getA());
}
}
public void abcd(){
List<TestB> list=new ArrayList();
TestB testB=new TestB();
int i=2;
while(i-->0){
testB.setA("hello,"+i);
list.add(testB);
}
for (TestB testB2 : list) {
System.out.println(testB2.getA());
}
}
}
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
import java.util.List;public class TestB{
String a="";
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
}各位帮忙看一下,为什么运行结果是
hello,1
hello,0
hello,0
hello,0我觉得应该是
hello,1
hello,0
hello,1
hello,0
问题就出现在你申明new TestB的位置 请看注释:
public void abc(){
List<TestB> list = new ArrayList<TestB>();
TestB testB = null;
int i=2;
while(i-- > 0){
testB = new TestB(); //每循环一次 重新申明一个新的TestB对象
testB.setA("hello,"+ i);
list.add(testB);
}
for (TestB testB2 : list) {
System.out.println(testB2.getA());
}
} public void abcd(){
List<TestB> list = new ArrayList<TestB>();
TestB testB = new TestB(); //从头到位,只有这一个testB实例,因此以最后一次的setA方法为准 所以输出了0,而不是1
int i=2;
while(i-- > 0){
testB.setA("hello,"+ i);
list.add(testB);
}
for (TestB testB2 : list)
System.out.println(testB2.getA());
}
但是在方法abcd()里面
while(i-- > 0){
testB.setA("hello,"+ i);
list.add(testB);
}
我每次都用testB的set()方法给a重新赋值了啊,再添加到list里面,是在每次循环的时候做的操作,而不是循环结束以后操作的,为什么每次加进去的会一样呢?
String sql="SELECT * FROM u_class";
Connection conn = (Connection) getSession().connection();
PreparedStatement ps=null;
List list=new ArrayList();
UClass uClass=new UClass();
try {
conn.setAutoCommit(false);
ps =conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while(rs.next()){
int id=rs.getInt("id");
String title=rs.getString("title");
uClass.setId(id);
uClass.setTitle(title);
list.add(uClass);
}
conn.commit();
}catch (Exception e) {
e.printStackTrace();
}finally{
try {
ps.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return list;
}
这是其中的一个方法,UClass 就相当于TestB
运行的时候就没有出现这种问题
.
.
.
while(rs.next()){
int id=rs.getInt("id");
String title=rs.getString("title");
uClass.setId(id);
uClass.setTitle(title);
list.add(uClass);
}
这里