import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; class ConstantHolder { static final ConstantHolder X = new ConstantHolder(); static final ConstantHolder Y = new ConstantHolder(); static final Object[] ARRAY = new Object[10]; static final Object[] ARRAY2 = new Object[10]; ConstantHolder() { if(X == null) { System.out.println("X is initializing"); } } interface Foo { ConstantHolder A = new ConstantHolder(); ConstantHolder B = new ConstantHolder(); } @Nullable String str; } class TestNewObjects { void test(ConstantHolder ti) { if(ConstantHolder.X == ConstantHolder.Y) { System.out.println("Impossible"); } if(ConstantHolder.Foo.A != ConstantHolder.Foo.B) { System.out.println("Always"); } if(ti == ConstantHolder.X && ti == ConstantHolder.Y) { System.out.println("Impossible"); } if(ti != ConstantHolder.X || ti != ConstantHolder.Foo.A) { System.out.println("Always"); } if(ConstantHolder.X.str != null && ConstantHolder.X.str.isEmpty()) { System.out.println("ok"); } if(ConstantHolder.X.str != null && ConstantHolder.Y.str.isEmpty()) { System.out.println("possible NPE"); } } Object getObject() { return new Object(); } void testTypes(boolean b) { Object x = b ? getObject() : ConstantHolder.X; if(x instanceof ConstantHolder && b) { System.out.println("true"); } if(!(x instanceof ConstantHolder) && b) { System.out.println("false"); } } void testArray() { if(ConstantHolder.ARRAY == ConstantHolder.ARRAY2) { System.out.println("Impossible"); } ConstantHolder.ARRAY[0] = Math.random() > 0.5 ? null : "foo"; if(ConstantHolder.ARRAY[0] != null) { System.out.println(ConstantHolder.ARRAY[0].hashCode()); } if(ConstantHolder.ARRAY2[0] != null) { System.out.println(ConstantHolder.ARRAY[0].hashCode()); } } }