使用集合时延伸出的数据类型区分
前言
平时做练习时遇到的一个陷阱
一、集合是什么?
List是Java里面的一个有序可重复的集合,其中有两个实现了Collection接口的实现类:ArrayList和 LinkedList
二、题目要求
创建一个学生类,生成两个学生对象,在控制台输入具体信息,最后打印结果
1.示例
学生对象JavaBean:
package test5;
public class Student {
private String name;
private String id;
public Student() {
}
public Student(String name, String id) {
this.name = name;
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
测试类:
package test5;
import java.util.ArrayList;
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<Student> stu = new ArrayList<>();
//生成两个Student对象 放入集合中
Student s = new Student();
int num = 2;
for (int i = 0; i < num; i++) {
String name = sc.next();
String id = sc.next();
s.setName(name);
s.setId(id);
stu.add(s);
}
//打印集合
for (Student obj : stu){
System.out.println(obj.getName()+" "+obj.getId());
}
}
}
打印结果:
结果分析:
直接打印stu查看结果:
发现打印出来的是两个对象的地址值,也就是此时说ArrayList里面存储的是地址值,而非数据值
而且两个对象的地址值是一样的,说明只生成了一个对象,之前的修改的信息都是作用在同一个对象上的。
查资料发现Java中的数据类型分为两种,分别为基本数据类型和引用数据类型
基本数据类型(8种):byte,boolean,short,char,int,float,double,long
引用数据类型:除了上面8种之外的所有数据类型,比如数组,String,对象等等
在传参时,基本数据类型传的是数值,而引用数据类型传的是地址值。
2.正确示例
经过上面的分析,只要让每个对象都能有不同的地址值就可以正确实现
将生成学生对象的代码放入循环里面每次都生成新的对象,地址值也不相同
代码如下:
结果:
总结
Java中的数据类型分为两大类,基本数据类型和引用数据类型。
基本数据类型中只要是非全局的,都将具体的值存储在栈中
引用数据类型栈中存储的是地址值,具体的值都存储在堆中