----------------------------------- randint Thu Apr 11, 2013 1:26 pm The equals() method: Strings are the only things that will work ----------------------------------- As I was programming a user name/password scheme (which uses a substitution cipher to encode passwords and then this cipher is saved to a *.text file), I noticed something very odd about the public class equality { public static char a I have no idea why this happens, have I done something wrong? Obviously, the [code]Object.equals (Object)[/code] method is supposed to test content equality, not object reference equality! ----------------------------------- 2goto1 Thu Apr 11, 2013 1:36 pm RE:The equals() method: Strings are the only things that will work ----------------------------------- Object.equals by default tests for object reference equality. See http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Object.html#equals(java.lang.Object). So by default, Object.equals(Object) tests for object reference equality. It always has. String.equals() however overrides this default behaviour to compare if the contents of one string are identical to the contents of another string. ----------------------------------- DemonWasp Thu Apr 11, 2013 2:44 pm RE:The equals() method: Strings are the only things that will work ----------------------------------- If you want to compare arrays, java.util.Arrays offers equals methods for all the "primitive" arrays as well as object arrays, as well as deepEquals(), which can be used on multi-dimensional arrays. In general, though, it is up to the programmer to define how equality (and hashcode, and comparisons, etc) work on their own data types. Many of the core Java classes override equals(Object) to provide the "expected" behaviour. Strings, the collections: List, Set, Map and all their implementors, and hundreds of other objects. Arrays, such as char[] and long[], do not define equality; they use the Object.equals(Object) implementation. As 2goto1 mentioned, that just checks that the two objects are at the same memory address (not "equal" so much as "exactly the same object"). If you want to compare a char[] to a String, then you will probably have to write that yourself. You might want to use String.getChars(...), but then it's probably easier to just write a method that compares character-by-character. ----------------------------------- randint Thu Apr 11, 2013 3:36 pm RE:The equals() method: Strings are the only things that will work ----------------------------------- in other words, you (DemonWasp and 2goto1) are saying that the equals method is no more than the "==" in anything other than Strings, Lists, Sets and Maps. ----------------------------------- DemonWasp Thu Apr 11, 2013 4:36 pm RE:The equals() method: Strings are the only things that will work ----------------------------------- No. If equals() hasn't been overridden, then the default implementation (in Object.equals()) is equivalent to the == operator. However, many types (probably most of the Java standard library) override .equals() to provide a more useful definition of equality. Those classes that override .equals() will usually have JavaDoc describing exactly what conditions result in equality. Also, you can override .equals() yourself when you write new classes, in which case you should also provide JavaDoc describing what makes .equals() return true. ----------------------------------- 2goto1 Fri Apr 12, 2013 12:36 pm RE:The equals() method: Strings are the only things that will work ----------------------------------- Just remember if your type overrides Object.equals(), it is also in your best interest to override Object.getHashCode()