为什么 Java 有这些Integer,Character类型和类,同时它们也在适应 Cint等char有时当人们创建数组时,他们倾向于使用Integer[] i = {......}
而不是有int[] i = {....};
什么区别呢?
4 回答
在java中,
Integer是一个包装类,即它是一个objectwhileint是一个原语。Integer默认值是null,而对于 int 它是0- 这两种类型都有自动装箱和自动拆箱的概念。
- 整数可以转换为an
int,反之亦然
Followign 程序演示了这一点
public class TestClass {
int num;
Integer number;
public static void main(String[] args) {
TestClass testClass = new TestClass();
System.out.println(testClass.num);
System.out.println(testClass.number);
testClass.autoBoxInt(testClass.num);
}
public void autoBoxInt(Integer number){
System.out.println(number);
}
}
输出是
0
null
0
该语句System.out.println(testCkass,num)打印int默认值,即0. System.out.println(testClass.number)打印Integer默认值,即null。当您传递testClass.num给带有参数的方法时Integer,int会自动转换为Integer对象。所以方法打印出来0。
java 集合框架使用自动装箱将基元转换为 Wrapper 类,因为它们不能接受基元值。它们有助于使用散列和哈希码快速检索对象并将其存储到集合中。以下示例演示了这一点
Set<Integer> numbers = new HashSet<Integer>();
numbers.add(new Integer(10));
numbers.add(new Integer(4));
numbers.add(6);
numbers.add(-9);
numbers.add(new Integer(65));
System.out.println(numbers);
这打印出集合
[4, 65, 6, -9, 10]
要了解哈希是什么以及如何使用哈希码,您可以查看这些链接 http://www.thejavageek.com/2013/06/27/what-are-hashcodes/ http://www.thejavageek.com/2013/ 06/26/Java 中等于方法的意义是什么/
我们通常可以看出的唯一区别是 Wrapper 是primitive.
包装类用于在需要时表示原始值Object。
Integer是一个对象,而int是一个基元。每当我们将 an 传递int给函数时,我们按原样传递它。
Integer包装一个 int。在这种情况下,它是不可变的,因此通过引用对其进行编辑是行不通的,但可以将其放入泛型中。这可以设置为 null 而int没有任何超出0或您解释为 null 条件的特殊值的可能性,例如-1or Integer.MAX_VALUE。
例如,ArrayList<int>完全无效,而ArrayList<Integer>必须与被包装的整数一起使用。
然而,使用自动装箱,我们可以立即将 an 添加int到 ArrayList 中,而无需手动包装它,如果我们get()在输入时需要一个原语,它会自动透明地打开它。
最后,如果您使用有限数量的不同变量或固定数组进行计算,您通常应该使用int. 在处理集合、列表或映射时,您应该将集合声明为FooCollection<Integer>直接add(允许自动装箱的 int。
Integer,Character像这样的其他是Objectswhile int,char而像这样的其他是原语。
最大的区别是 anObject可以null,而原始值不能。
建议尽可能使用原始值,因为它们使用的内存更少。