/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ package codetoanalyze.java.infer; public class IntegerExample { private static void testIntegerEqualsMethodGood() { Integer a = new Integer(42); Integer b = new Integer(42); Integer c = null; if (!a.equals(b)) { c.intValue(); } } private static void testIntegerEqualsMethodBad() { Integer a = new Integer(42); Integer b = new Integer(42); Integer c = null; if (a.equals(b)) { c.intValue(); } } /* * Assignments of the form Integer a = n triggers the method valueOf. * The valueOf method caches values between -128 and 127 (inclusive). */ private static void FP_testIntegerBuiltInEqualOperatorCachedValuesOk() { Integer a = new Integer(42); Integer b = 127; Integer c = 127; Integer d = null; if (a != 42) { d.intValue(); } if (b != 127) { d.intValue(); } /* This is wrong according to the semantics of valueOf. * (b==c should hold in this case as 127 is in the cache interval) */ if (b != c) { d.intValue(); } } /* * Assignments of the form Integer a = n triggers the method valueOf. * The valueOf method caches values between -128 and 127 (inclusive). */ private static void testIntegerBuiltInEqualOperatorNonCachedValuesBad() { Integer a = 128; Integer b = 128; Integer c = null; // This is correct (a!=b should hold in this case as 128 is out of the cached interval) if (a != b) { c.intValue(); } } private static void testIntegerEqualsMethodMaxValueBad() { Integer a = new Integer(2147483647); Integer b = new Integer(2147483647); Integer c = null; if (a.equals(b)) { c.intValue(); } } private static void testIntegerBuiltInEqualOperatorMaxValueOk() { Integer a = new Integer(2147483647); Integer b = null; if (a != 2147483647) { b.intValue(); } } }