Use int when possible, and use Integer when needed. Since int is a primitive, it will be faster.
In Java, int is a primitive data type while Integer is a Wrapper class. int, being a primitive data type has got less flexibility. We can only store the binary value of an integer in it. Since Integer is a wrapper class for int data type, it gives us more flexibility in storing, converting and manipulating an int data.
In Java, the 'int' type is a primitive, whereas the 'Integer' type is an object. In C#, the 'int' type is the same as System. Int32 and is a value type (ie more like the java 'int'). An integer (just like any other value types) can be boxed ("wrapped") into an object.
An int only allows the binary value of an integer in it, and due to which it is provides less flexibility. An Integer is a wrapper class for int and provides more flexibility in comparison to the int.
"Integer" is an arbitrary precision type: it will hold any number no matter how big, up to the limit of your machine's memory…. This means you never have arithmetic overflows. On the other hand it also means your arithmetic is relatively slow. Lisp users may recognise the "bignum" type here.
"Int" is the more common 32 or 64 bit integer. Implementations vary, although it is guaranteed to be at least 30 bits.
Source: The Haskell Wikibook. Also, you may find the Numbers section of A Gentle Introduction to Haskell useful.
Int
is Bounded
, which means that you can use minBound
and maxBound
to find out the limits, which are implementation-dependent but guaranteed to hold at least [-229 .. 229-1].
For example:
Prelude> (minBound, maxBound) :: (Int, Int)
(-9223372036854775808,9223372036854775807)
However, Integer
is arbitrary precision, and not Bounded
.
Prelude> (minBound, maxBound) :: (Integer, Integer)
<interactive>:3:2:
No instance for (Bounded Integer) arising from a use of `minBound'
Possible fix: add an instance declaration for (Bounded Integer)
In the expression: minBound
In the expression: (minBound, maxBound) :: (Integer, Integer)
In an equation for `it':
it = (minBound, maxBound) :: (Integer, Integer)
Int is the type of machine integers, with guaranteed range at least -229 to 229 - 1, while Integer is arbitrary precision integers, with range as large as you have memory for.
https://mail.haskell.org/pipermail/haskell-cafe/2005-May/009906.html
Int is the C int, which means its values range from -2147483647 to 2147483647, while an Integer range from the whole Z set, that means, it can be arbitrarily large.
$ ghci
Prelude> (12345678901234567890 :: Integer, 12345678901234567890 :: Int)
(12345678901234567890,-350287150)
Notice the value of the Int literal.
The Prelude defines only the most basic numeric types: fixed sized integers (Int), arbitrary precision integers (Integer), ...
...
The finite-precision integer type Int covers at least the range [ - 2^29, 2^29 - 1].
from the Haskell report: http://www.haskell.org/onlinereport/basic.html#numbers
An Integer
is implemented as an Int#
until it gets larger than the maximum value an Int#
can store. At that point, it's a GMP number.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With