为什么 Java 有这些Integer
,Character
类型和类,同时它们也在适应 Cint
等char
有时当人们创建数组时,他们倾向于使用Integer[] i = {......}
而不是有int[] i = {....};
什么区别呢?
4 回答
在java中,
Integer
是一个包装类,即它是一个object
whileint
是一个原语。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 条件的特殊值的可能性,例如-1
or Integer.MAX_VALUE
。
例如,ArrayList<int>
完全无效,而ArrayList<Integer>
必须与被包装的整数一起使用。
然而,使用自动装箱,我们可以立即将 an 添加int
到 ArrayList 中,而无需手动包装它,如果我们get()
在输入时需要一个原语,它会自动透明地打开它。
最后,如果您使用有限数量的不同变量或固定数组进行计算,您通常应该使用int
. 在处理集合、列表或映射时,您应该将集合声明为FooCollection<Integer>
直接add(
允许自动装箱的 int。
Integer
,Character
像这样的其他是Objects
while int
,char
而像这样的其他是原语。
最大的区别是 anObject
可以null
,而原始值不能。
建议尽可能使用原始值,因为它们使用的内存更少。