为什么两个不同地方的students.get(ID),一个可以直接用创建的对象st来代替,另一个却不可以用st代替?

来源:5-2 学生选课---使用 Map 添加学生

时代花园

2018-09-16 16:20

public void testPut() {

// 创建一个Scanner对象,用来获取输入的学生ID和姓名

Scanner console = new Scanner(System.in);

int i = 0;

while (i < 3) {

System.out.println("请输入学生ID:");

String ID = console.next();

// 判断该ID是否被占用

Student st = students.get(ID);

if (st == null) {

// 提示输入学生姓名

System.out.println("请输入学生姓名:");

String name1 = console.next();

// 创建新的学生对象

Student newStudent = new Student(ID, name1);

// 通过调用students的put方法,添加ID-学生映射

students.put(ID, newStudent);

System.out.println("成功添加学生:" +students.get(ID).name+"\n");                 //为什么这里的students.get(ID)不可以用st代替?

i++;

} else {

System.out.println("该学生ID已被占用!");

continue;

}

}

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

public void testKeySet() {

// 通过keySet方法,返回Map中的所有“键”的Set集合

Set<String> keySet = students.keySet();

// 取得students的容量

System.out.println("\n"+"总共有:" + students.size() + "个学生!");

// 遍历keySet,取得每一个键,再调用get方法取得每个键对应的value

for (String stuId : keySet) {

Student st = students.get(stuId);

if (st != null)

System.out.println("学生:" + st.name);                                                     //为什么这里的students.get(ID)又可以用st代替?

}

}


写回答 关注

1回答

  • 时代花园
    2018-09-16 17:15:19

    好吧,我好像已经明白了

    慕姐0546... 回复拆鸡

    一个是Student的引用变量st,一个是具有泛型<String,Student>的Map集合,名称叫students,两个不是一个东西啦。而且students算是一个全局变量;在方法里的Student的引用变量st算是局部变量,这个局部变量只在该方法有用。

    2020-02-03 18:15:02

    共 4 条回复 >

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409792 学习 · 4340 问题

查看课程

相似问题