1   // Example 5.3 joi/examples/EqualsDemo.java  
2   //
3   //
4   // Copyright 2003 Bill Campbell and Ethan Bolker
5   
6   // A class illustrating == and equals().
7   // 
8   // %> java EqualsDemo 
9   // Different objects, same field:
10  // e1 == e1LookAlike ->         false
11  // e1.equals( e1LookAlike ) ->  true
12  // Same object:
13  // e1 == e1Too ->               true
14  // 
15  // Different ArrayLists with equal (but not ==) elements:
16  // alist0 == alist1 ->      false
17  // alist0.equals(alist1) -> true
18  // 
19  // Different TreeMaps with equal keys
20  // mapping to equal (but !=) values:
21  // tmap0 == tmap1 ->      false
22  // tmap0.equals(tmap1) -> true
23  // 
24  // tmap0.toString() -> {sillykey = EqualsDemo value 1}
25  // tmap1.toString() -> {sillykey = EqualsDemo value 1}
26  // Are these Strings == ?    false
27  // Are these Strings equal ? true
28  
29  import java.util.ArrayList;
30  import java.util.TreeMap;
31  
32  public class EqualsDemo
33  {
34      // Properties of an EqualsDemo object.
35      //
36      // Override equals: two of these objects are equal if
37      // their integer field has the same (i.e. ==) value.
38      //
39      // When you override equals it's customary to override
40      // toString too, so that equal objects return the equal
41      // Strings, so we do.
42  
43      private int field;
44  
45      public EqualsDemo( int field )
46      {
47          this.field = field;
48      }
49  
50      public boolean equals( Object other )
51      {
52          return (other instanceof EqualsDemo)
53              && (this.field == ((EqualsDemo)other).field);
54      }
55  
56      public String toString() 
57      {
58          return " EqualsDemo value " + field; 
59      }
60  
61      public static void main( String[] args ) 
62      {
63          Terminal t = new Terminal();
64  
65          // EqualsDemo object == vs equals() 
66          EqualsDemo e1          = new EqualsDemo( 1 );
67          EqualsDemo e1LookAlike = new EqualsDemo( 1 ); // same field.
68          EqualsDemo e1Too       = e1;                  // same object
69  
70          t.println("Different objects, same field:");
71          t.println("e1 == e1LookAlike ->         " + (e1 == e1LookAlike));
72          t.println("e1.equals( e1LookAlike ) ->  " + e1.equals( e1LookAlike ));
73          t.println("Same object:");
74          t.println("e1 == e1Too ->               " + (e1 == e1Too));
75          t.println();
76  
77          // Arrays and Maps
78          ArrayList alist0 = new ArrayList();
79          ArrayList alist1 = new ArrayList();
80  
81          alist0.add( e1);
82          alist1.add( e1LookAlike );
83  
84          t.println( "Different ArrayLists with equal (but not ==) elements:" );
85          t.println( "alist0 == alist1 ->      "  + (alist0 == alist1));
86          t.println( "alist0.equals(alist1) -> "  + alist0.equals(alist1));
87          t.println();
88  
89          TreeMap tmap0 = new TreeMap();
90          TreeMap tmap1 = new TreeMap();
91  
92          tmap0.put( "sillykey ", e1 );
93          tmap1.put( "sillykey ", e1LookAlike );
94  
95          t.println( "Different TreeMaps with equal keys" );
96          t.println( "mapping to equal (but !=) values:" );
97  
98          t.println( "tmap0 == tmap1 ->      " + (tmap0 == tmap1));
99          t.println( "tmap0.equals(tmap1) -> " + tmap0.equals(tmap1));
100         t.println();
101 
102         // Test Strings for == and equal
103         String s0 = tmap0.toString();
104         String s1 = tmap1.toString();
105         t.println( "tmap0.toString() -> " + s0);        
106         t.println( "tmap1.toString() -> " + s1);
107         t.println( "Are these Strings == ?    " + (s0 == s1) );
108         t.println( "Are these Strings equal ? " + (s0.equals(s1)) );
109     }
110 }
111