请问:java 利用for往ArrayList里存入数据时,变量定义在for循环里面和外面的时候结果不一样,为什么???

java里利用for循环往ArrayList里存入自定义类型的数据,当在for里面和外面定义这个自定类型的变量时,再输出可变数组里的数据结果为什么不同?代码如下:impo... java里利用for循环往ArrayList里存入 自定义类型的 数据,当在for里面和外面定义这个自定类型的变量时,再输出可变数组里的数据结果为什么不同 ?
代码如下:
import java.util.ArrayList;
import java.util.Scanner;
public class ArrDemo{
public static void main(String[] args){
ArrayList<Staff> list = new ArrayList<Staff>();
//调用方法输入数据
input(list);
//调用方法输出数据
print(list);
}
//定义一个输入的方法
public static void input(ArrayList<Staff> arr){
Scanner sc = new Scanner(System.in);
System.out.println("请输入数据:");
//声明一个数组存放数据
Staff yuanGong = new Staff();//①在这行定义和在②处定义结果为什么不同?
for(int i = 0;i<3;i++){
//Staff yuanGong = new Staff(); ②行.
yuanGong.salary=sc.nextDouble();
arr.add(yuanGong);
}
}
//定义一个输出的方法
public static void print(ArrayList<Staff> arr){
Double sum =0.0;
for(int i = 0;i<arr.size();i++){
sum+=arr.get(i).salary;
}
System.out.println("总和是:"+sum);
}
}
已经定义了Staff 类:
public class Staff{
String name;
Double salary;
String position;

}
展开
 我来答
308xiaobao
高粉答主

2016-11-07 · 每个回答都超有意思的
知道大有可为答主
回答量:2.6万
采纳率:95%
帮助的人:2732万
展开全部
你要知道每次new一个对象就是一个新对象,在循环里new,就是每一次循环都创建一个全新的对象。而在循环外只new了一次,你每次循环只是改变外面new的对象属性值而已。
list集合可以存放多个相同的值
更多追问追答
追问
可是 在for循环里面有 arr.add(yuanGong) 不是已经把变量yuanGong存到ArrayList集合里面了?
比如我 输入的三个数是1 2 3
在for里面创建yuanGong 的时候(就是执行②的时候),打印结果是 9 (我理解是3+3+3).
在for外面创建yuanGong 的时候(就是执行①的时候),打印结果是 6 (我理解是1+2+3).
这是为啥?
追答
你还是没理解我上面的话,在 执行1的时候,循环了3次,你只在外面创建了一次对象,你每次给salary赋值,修改的都是同一个对象第一次值是1,存进集合,第二次值为2,存进集合但是前面存进去的对象值也跟着改变了也变成2了,因为你操作的是同一个对象。

第三次值为3,存进集合先前存进去的两次,在你改变salary时也跟着改变,说来说去都是你再操作一个对象。而list集合里你把同一个对象存了3次
而执行2的时候,你循环3次new了对象3次,就有3个不同的对象,然后你给salary赋值当然值不同咯。
打了那么多字给加点财富吧,还不明白欢迎再问
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式