3个回答
展开全部
这是由于java引用造成的,相当于c语言中的指针,如果没有理解java的引用,很容易犯这种错误。
因为String[] clo是一个对象。当你第一次执行循环时,li.add(clo)只是把clo的引用放到list中去了,就是li.get(0)的中存放了clo的引用。第二次执行时循环时,clo中的值修改了,但没用创建新的对象,由于你没有创建新的对象,li.get(1)再次存放clo的引用,所以导致li.get(0)的值也修改了。
简单的说,li.get(0)和li.get(1)存放的是同一个对象。所以你想不出错,需要把clo的定义放到while循环体里面。
ps:java虽然对外无指针,但内部还是使用指针实现的。建议你去看一下java对象在内存中的存放方式。
因为String[] clo是一个对象。当你第一次执行循环时,li.add(clo)只是把clo的引用放到list中去了,就是li.get(0)的中存放了clo的引用。第二次执行时循环时,clo中的值修改了,但没用创建新的对象,由于你没有创建新的对象,li.get(1)再次存放clo的引用,所以导致li.get(0)的值也修改了。
简单的说,li.get(0)和li.get(1)存放的是同一个对象。所以你想不出错,需要把clo的定义放到while循环体里面。
ps:java虽然对外无指针,但内部还是使用指针实现的。建议你去看一下java对象在内存中的存放方式。
追问
额,知道了,谢谢了,我打印了下,发现get(0)和get(1)里面存的是col数组的首地址
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询