В моем коде есть много конечных значений, например 10000. Они никогда не меняются, я ничего не делаю с ними, иногда проверяет, как if(number1 == number2)
.Использовать int или Integer
Лучше использовать int
или Integer
для таких чисел?
В моем коде есть много конечных значений, например 10000. Они никогда не меняются, я ничего не делаю с ними, иногда проверяет, как if(number1 == number2)
.Использовать int или Integer
Лучше использовать int
или Integer
для таких чисел?
В вашем случае используйте int
.
В общем случае, если вы находитесь в ситуации, когда вы могли бы посильно использовать либо элементарное значение почти всегда предпочтительнее:
Integer
- вам нужно будет использовать .equals()
, чтобы убедиться, что вы получаете то, что хотите. См. here для более подробной информации.Требования к памяти в наши дни не так важны, но большая проблема - вторая, что может вызвать много ошибок, если вы не знаете об этом (особенно, поскольку есть случаи где ==
будет работать так, как вы ожидаете, и другими, где это не будет - это не «надежная» ошибка в этом смысле.)
использовать int, так как это примитивный тип. Это всегда лучший вариант из-за эффективности памяти, чтобы выбрать примитивный тип вместо выбора полноценного объекта-обертки.
С Integer
s - объекты, они занимают больше места в памяти. Если вы никогда не используете методы Integer
или что-то еще, требующее, чтобы это был объект, int
s более эффективны с точки зрения памяти, так как int
является примитивным типом.
В великой схеме вещей, вероятно, не имеет значения, сколько памяти имеют современные компьютеры. Однако никакого вреда быть безопасным.
Следует отметить, что если вы используете ==
для Integer
, вы проверяете, совпадают ли ссылки. Для объектов Integer
предпочтительнее использовать метод equals()
.
Это не имеет значения, если это int
или Integer
. В java они очень взаимозаменяемы при использовании autoboxing.
Это действительно имеет значение, если вы планируете хранить их в коллекции. Коллекции принимают только объекты, что означает, что вам нужно будет использовать Integer
.
Если вы решите использовать Integer
и хотите их сравнить, не используйте ==
. Вместо этого используйте метод compareTo
или метод equals
.
Вы сравниваете ссылки, поэтому лучше использовать int. Никогда не используйте «==» для сравнения объектов Integer (или Float, Double, Short, Character, Byte, Long, BigDecimal ...) для равенства. Сравните числа в их примитивной форме - т. Е. Работайте с int, short, long, double.
Если вы хотите сравнить целые числа, используйте метод compareTo().
Используйте 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
Для констант использовать int
, как и с константами, вам нужно только получить их ценность. Все остальное, что поставляется с Integer
, является избыточным в этом случае.
Где вам необходимо пройти целые числа в качестве параметров, это удобно использовать Integer
, как вы получите еще один вариант значения параметра являющегося null
(т.е. в случае с недопустимым параметром, или законным случае нет-значения).
Вы сравниваете эти константы с переменными типа 'int' или' Integer'? Если вы сравните их с 'int', вы можете использовать' int' в качестве типа ваших констант для сохранения служебных сообщений unboxing. Если вы сравниваете их с объектами Integer, то прежде всего ваш пример не работает, так как он '==' сравнивает ссылки двух объектов. Вместо этого вы должны использовать 'equals()' для обеспечения сравнения значений. – adranale