Java Long Value Cacheing

The cache size may be controlled by -XX:AutoBoxCacheMax=<size> option.

  1. == compares references, equals compares value. Comparing Long values should use latter.

  2. Another way is to use longA.compareTo(longB) == 0

  3. LongCache[-128,127], which means Long value between -128 to 127 would return same object, because it run Long.valueOf(String) internally.

  public static Long  valueOf(long l) {
      final int offset = 128;
      if (l >= -128 && l <= 127) { // will cache
          return LongCache.cache[(int)l + offset];
      }
      return new Long(l);
  }
  1. Same reason, it has IntegerCache
  public static Integer valueOf(int i) {
      if(i >= -128 && i <= IntegerCache.high)
          return IntegerCache.cache[i + 128];
      else
          return new Integer(i);
  }

Conclusion:
use .equals() as much as possible for Objects comparing; leave >=< to primitive types.

References

  1. what-are-not-2-long-variables-equal-with-operator-to-compare-in-java

  2. Integer wrapper class and == operator - where is behavior specified?

  3. Compare two long values

  4. Why Integer class caching values in the range -128 to 127?

Tags:

Updated: