class TestBooleanEquals{

    public static void main(String[] args){

    /** Object equals()***********************************************/    
        Class_A a = new Class_A();
        Class_B b = new Class_B();
        Class_A c = new Class_A();
        Class_B d = b;
        Class_A e = null;
        
        System.out.println("a.equals(b) \t -> " + (a.equals(b)) );
        System.out.println("a.equals(c) \t -> " + (a.equals(c)) );
        System.out.println("b.equals(d) \t -> " + (b.equals(d)) );
        System.out.println("a.equals(e) \t -> " + (a.equals(e)) );
        
   /** String equals() **********************************************/     
        String s0 = "Hello";
        String s1 = new String("Hello");    // force new string object
        String s2 = s0;
        
        System.out.println("s0.equals(s1) \t -> " + (s0.equals(s1)) );
        System.out.println("s0.equals(s2) \t -> " + (s0.equals(s2)) );
        
    /** Boolean equals() ********************************************/
        Boolean b0 = new Boolean(true);
        Boolean b1 = new Boolean(false);
        Boolean b2 = new Boolean(true);
        Boolean b3 = b1; 
        
        // following do not compile
        // b3 = true;              
        // boolean b4 = true;
        // b3 = b4;                
        
        System.out.println("b0.equals(b2) \t -> " + (b0.equals(b2)) );
        System.out.println("b0.equals(b1) \t -> " + (b0.equals(b1)) );
        System.out.println("b1.equals(b3) \t -> " + (b3.equals(b1)) );    

    }
}

class Class_A{
}

class Class_B extends Class_A{
}