class App { void test(A a, A b) { if(a.field != b.field) { if(a == b) { System.out.println("Impossible"); } } System.out.println(a.field); } void test1(A a, A b) { if(a.field != b.field) { // Not supported anymore, as `field` is flushed :( if(a == b) { System.out.println("Impossible"); } } } public static void main(String[] args) { A a1 = new A(); assert a1.field == 0; A a2 = a1; assert a2.field == 0; a1.field = 10; assert a2.field == 10; } void testThreeClasses(Node x, Node y, Node z) { if (x.a == y && x.b == z && x == y.b && x == z.a && x == z) { assert x == x.a; assert x == x.b; } } class Node { Node a, b; } } class A { public int field = 0; } class X { X foo; void test() { final X localFoo = foo.getX(); if (localFoo == null) { boolean nonNull = foo != null; } } native X getX(); }