我是Java新手。 在Java中,我可以看到int和Integer是不同的。 int是原始类型,而Integer是类。 我已经完成了以下代码。
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Collectors;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
@Builder
public class Student {
private Integer roleNo;
private String name;
private String city;
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Student> lstStudent = new LinkedList<Student>();
lstStudent.add(new Student(111, "aaa", "Moon"));
lstStudent.add(new Student(333, "ccc", "Sun"));
lstStudent.add(new Student(222, "bbb", "Jupiter"));
List<Student> sortedStudents = lstStudent.stream().sorted(Comparator.comparing(Student::getRoleNo))
.collect(Collectors.toList());
System.out.println(sortedStudents);
}
}
我在sortedstudent
列表中给出了断点,可以看到我正在获取所有值,但没有获取整数值。它显示为'Integer'.........为什么?
我在这里错过了一些关键概念吗?
答案 0 :(得分:1)
这里的answer很好地解释了正在发生的事情:
Integer是一个类,与Java语言中的其他类没有什么不同。 Integer类型的变量存储对Integer对象的引用,就像存储任何其他引用(对象)类型一样。 Integer.parseInt(“ 1”)是对Integer类的静态方法parseInt的调用(请注意,此方法实际上返回一个int而不是Integer)。
更具体地说,Integer是一个具有int类型的单个字段的类。此类用于需要将int像其他任何对象一样对待的地方,例如在通用类型或需要可空性的情况下。
类似于@NicholasK
在评论中说;如果在调试器中扩展Integer
对象,您将看到它是一个包含名为valu
e的单个字段的对象,该字段包含表示为原始int
的实际值。
尽管您可以在IDE中自己看到它,但是下面的屏幕快照可以为所有偶然遇到相同问题的用户提供更多上下文: