2012-06-12 5 views
4

В моем коде есть много конечных значений, например 10000. Они никогда не меняются, я ничего не делаю с ними, иногда проверяет, как if(number1 == number2).Использовать int или Integer

Лучше использовать int или Integer для таких чисел?

+0

Вы сравниваете эти константы с переменными типа 'int' или' Integer'? Если вы сравните их с 'int', вы можете использовать' int' в качестве типа ваших констант для сохранения служебных сообщений unboxing. Если вы сравниваете их с объектами Integer, то прежде всего ваш пример не работает, так как он '==' сравнивает ссылки двух объектов. Вместо этого вы должны использовать 'equals()' для обеспечения сравнения значений. – adranale

ответ

9

В вашем случае используйте int.

В общем случае, если вы находитесь в ситуации, когда вы могли бы посильно использовать либо элементарное значение почти всегда предпочтительнее:

  • Они потенциально больше памяти эффективной
  • Вы всегда можете использовать == достоверно, что не относится к типу класса Integer - вам нужно будет использовать .equals(), чтобы убедиться, что вы получаете то, что хотите. См. here для более подробной информации.

Требования к памяти в наши дни не так важны, но большая проблема - вторая, что может вызвать много ошибок, если вы не знаете об этом (особенно, поскольку есть случаи где == будет работать так, как вы ожидаете, и другими, где это не будет - это не «надежная» ошибка в этом смысле.)

3

использовать int, так как это примитивный тип. Это всегда лучший вариант из-за эффективности памяти, чтобы выбрать примитивный тип вместо выбора полноценного объекта-обертки.

5

С Integer s - объекты, они занимают больше места в памяти. Если вы никогда не используете методы Integer или что-то еще, требующее, чтобы это был объект, int s более эффективны с точки зрения памяти, так как int является примитивным типом.

В великой схеме вещей, вероятно, не имеет значения, сколько памяти имеют современные компьютеры. Однако никакого вреда быть безопасным.

Следует отметить, что если вы используете == для Integer, вы проверяете, совпадают ли ссылки. Для объектов Integer предпочтительнее использовать метод equals().

2

Это не имеет значения, если это int или Integer. В java они очень взаимозаменяемы при использовании autoboxing.

Это действительно имеет значение, если вы планируете хранить их в коллекции. Коллекции принимают только объекты, что означает, что вам нужно будет использовать Integer.

Если вы решите использовать Integer и хотите их сравнить, не используйте ==. Вместо этого используйте метод compareTo или метод equals.

2

Вы сравниваете ссылки, поэтому лучше использовать int. Никогда не используйте «==» для сравнения объектов Integer (или Float, Double, Short, Character, Byte, Long, BigDecimal ...) для равенства. Сравните числа в их примитивной форме - т. Е. Работайте с int, short, long, double.

Если вы хотите сравнить целые числа, используйте метод compareTo().

1

Используйте INT, когда вы можете и использовать Integer, когда вы должны:

Если значение может быть нулевым использованием Integer, но вам придется использовать методы compareTo и Equals, чтобы сделать сравнение между тогдашним.

Если значение не может быть пустым, используйте int, таким образом, вы будете иметь более читаемый код с классическими операторами ==, >=, < и т.д ...

// int primitive, easy to handle 
int a = 5; 
int b = 5; 
int c = null; // Compile error, can't have null primitive values 
if(a == b) // True 
if(a > b) // False 
if(a >= b) // True 

// Integer, more complicated: 
Integer A = new Integer(5); 
Integer B = new Integer(5); 
Integer c = null; // Work 

if(A == B) // False, they are not the same objects 
if(A.equals(B)) // True, same value 

if(A > B) // Compile error... 
if(A.compareTo(B)>0) // A > B, the int version is more readable 
if(A.compareTo(B)>=0) // A >= B, the int version is more readable 
1

Для констант использовать int , как и с константами, вам нужно только получить их ценность. Все остальное, что поставляется с Integer, является избыточным в этом случае.

Где вам необходимо пройти целые числа в качестве параметров, это удобно использовать Integer, как вы получите еще один вариант значения параметра являющегося null (т.е. в случае с недопустимым параметром, или законным случае нет-значения).

Смежные вопросы