/** @author Larry Battle <bateru.com/news> @date April 19, 2012 @purpose To show a simple comparison between == and equals(). */ public class SameObjectTest { public static boolean areAssertsEnabled(){ boolean isEnabled = false; try{ assert false: "Yes asserts are enabled."; }catch( AssertionError e ){ isEnabled = true; } return isEnabled; } public static void main(String[] args ){ // All asserts should be without an error. String message = "Test Completed with no errors."; int[] ints = new int[]{ 10, 10, 20 }; String[] strings = new String[]{ new String( "Duck" ), new String( "Duck" ), new String( "Goose!" ) }; Worker[] workers = new Worker[]{ new Worker( "Working" ), new Worker( "Working" ), new Worker( "Sleeping" ) }; assert ints[0] == ints[1] : "10 is 10"; assert ints[1] != ints[2] : "10 is not 20"; // Primative data types can't use ints[i].equals( ints[j] ) because they don't have methods. // Strings are a little bit more tricky. Go here for more inforamtion. http://www.janeg.ca/scjp/lang/strLiteral.html assert strings[0] == strings[0]: "An equality check, ==, on objects compares the references, not the values."; assert strings[0] != strings[1]: "strings[0] and strings[1] do not have the same reference point. In otherwords, that don't have the same Class and hashCodes."; assert strings[0].equals( strings[1] ): "String equals methods is predefined to compare the value of the string objects."; assert !strings[0].equals( strings[2] ): "the string duck should not equal the string goose!"; // You have to override the equals methods for user-defined objects. assert workers[0] != workers[1]: "workers[0] and workers[1] have two different hash values."; assert workers[0].equals( workers[1] ): "However workers[0] and workers[1] are equivalent to eachother, according to the equals method."; assert !workers[1].equals( workers[2] ): "But this is not the case for workers[1] and workers[2]."; message = ( areAssertsEnabled() ) ? message : "Asserts are disabled! Please enable with the switch -ea, ex. java -ea "; System.out.println( message ); } } class Worker{ public String status; public Worker( String status ){ this.status = ( status != null ) ? status : "Unknown"; } public boolean equals( Object obj ){ boolean areSame = false; Worker x; if( obj != null ){ if( obj == this ){ areSame = true; } if( this.getClass() == obj.getClass() ){ x = (Worker) obj; if( x != null && x.status.equals( this.status ) ){ areSame = true; } } } return areSame; } } |
(Page view Count: 41)