是否有理由始终使用Objects而不是原语?

Kai*_*Bum 4 java primitive memory-management wrapper

所以我刚开始用Java编写第二个编程类,这是教授给我们演示循环和数组的例子.

public class ArraysLoopsModulus {                       
public static void main(String [ ] commandlineArguments){                   
  //Declare  & Instatiate an Array of 10 integers
  Integer[ ] arrayOf10Integers = new Integer[10];

  //initialize the array to the powers of 2
  Integer powersOf2 = new Integer(1);   
  for(int i=0;i<arrayOf10Integers.length;i++){
    arrayOf10Integers[i] = powersOf2;
    //multiply again by 2
    powersOf2 = powersOf2 * 2;
  }

  //display the powers of 2     
  System.out.println("The first 10 powers of 2 are: ");
  for(int i=0;i<arrayOf10Integers.length;i++){
    System.out.print(arrayOf10Integers[i] + ", ");
  }  
}
}
Run Code Online (Sandbox Code Playgroud)

看了所有即将到来的例子,似乎我的教授从不使用原始数据类型,他总是使用等效的对象类(在这种情况下Integer代替intInteger[]不是代替int[]).另外我理解某些情况需要使用对象.我的问题是:

可能的原因是总是使用该对象?特别是在这种简单的情况下,使用原语似乎更合适

总是这样做是不是很糟糕?我是否应该总是使用这些对象来让他开心,但在现实生活中要知道在可能的情况下使用原始数据类型

我将这个例子视为糟糕的编程吗?

谢谢

编辑: 感谢所有的好答案,我(一个初学者)只需要确认我在这里看到的不是最好的编码方式.

Ale*_*ien 12

可能的原因是总是使用该对象?

没有理由,这段代码很难看.作为对象的基元在使用集合时具有优势,但在示例中不使用它们.

特别是在这种简单的情况下,使用原语似乎更合适

绝对正确,在这种情况下对象更糟糕,他们需要更多的内存,在你的例子中没有优势.

总是这样做是不是很糟糕?

是的,如果需要,您应该只使用对象(盒装基元).除了在集合中使用之外,这样的对象也可以是null,这是一个可以用作"不存在(尚未)存在的价值"等的优点.

我是否应该总是使用这些对象来让他开心,但在现实生活中要知道在可能的情况下使用原始数据类型

不,告诉他这没用.但请记住,你的教授从来不想给上学前课程.他可能"被迫"这样做了.

我将这个例子视为糟糕的编程吗?

是.最大的坏!

  • 告诉null /"没有数据"除了0之外的能力有时是值得的:) (2认同)

Swa*_*nil 9

来自Effective JavaJoshua Bloch,

第49项:首选原始类型为盒装基元.基元类型和盒装基元之间有三个主要区别:

  • 基元只有它们的值,而盒装基元的特征与它们的值不同.

  • 原始类型不能为空,但是盒装基元可以.

  • 原始类型比盒装基元更具空间和时间效率.

必须小心使用带有盒装基元的==运算符,与任何其他引用类型一样,它会比较标识,您几乎肯定希望比较值.如果将带框基元与带有==运算符的基元进行比较,则将基元类型装箱并比较标识,因此也必须小心.

装箱和拆箱的过程,特别是在循环中会严重影响性能.

基本上,应该避免使用box原语,除非不能使用原始类型,例如在集合中或作为参数化类型.

我希望这可以帮助你理解差异.