2013-07-08 40 views
1

为什么Java的拥有这些IntegerCharacter类型和类 同时,他们也适应C'S intchar等 有时,当人们创建阵列,它们往往 使用Integer[] i = {......} 而非int[] i = {....}; 的区别是什么呢?整数与int类型,哪个更好?

+0

把问题的标题在谷歌。这里会有很多答案。 – Lion

回答

0

在java中,

  • Integer是一个包装类,即它是一个objectint是一个原语。
  • Integer默认值是null而INT是0
  • 有自动装箱和自动拆箱这两种类型的概念。
  • 整数可以被转换为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 

0声明System.out.println(testCkass,num)打印int默认值。 System.out.println(testClass.number)打印Integer默认值,即null。当您将testClass.num传递给参数为Integer的方法时,int会自动转换为和Integer对象。所以该方法打印出0

Java集合框架使用自动装箱功能将原语转换为包装类,因为它们无法获取原始值。它们使用散列和散列码帮助快速检索和存储对象。下面的例子演示了这种

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/what-is-the-significance-of-equals-method-in-java/

+0

您的示例还应该包括如何使用自动装箱将基元放入通用类(如集合)中,然后快速检索它们。 – hexafraction

+0

@hexafraction感谢您的建议:)我做到了。 –

0

Integer是对象,而int是一个原始的。每当我们将一个int传递给一个函数,我们就按原样传递它。

Integer包装int。在它的情况下,它是不可变的,所以通过引用编辑它不会起作用,但它可以可以被放入到泛型中。这可以设置为空,而int不可能有任何超出0的值,也可能是您解释为空值的特殊值,例如-1Integer.MAX_VALUE

例如,ArrayList<int>是完全无效的,而ArrayList<Integer>必须与包裹整数一起使用。

随着autoboxing,但是,我们可以马上添加一个int到一个ArrayList而无需手动包裹它,如果我们需要一个原始的,当我们get()进入,它会自动解开透明它。

在结束时,如果你正在做具有鲜明的变量数量有限或固定阵列的计算,通常应使用int。当与集合,列表或地图打交道时,你应该声明集合作为FooCollection<Integer>然后add(一个int直接允许自动装箱。

0

IntegerCharacter和其他像这样的Objectsintchar和其他像这样的原语。

最大的区别是Object可以是null而原始值不能。

我们推荐使用在那里你可以,因为他们使用较少的内存的原始值。

0

我们大致可以说唯一的区别是包装是primitive客观再现。

Wrapper classes用于当需要Object来表示原始值。