In Java programming or interview often encounter = =, equals () comparison. I looked at the source code, the actual programming summary.
1. = =
= = In Java is the address that compares two objects in the JVM. Better understand. Look at the following code:
1 public class Comaddr{2 public static void Main (string[] args) throws Exception {3 String s1 = "Nihao"; 4 Stri ng s2 = "Nihao"; 5 string s3 = new String ("Nihao"); 6 System.out.println (S1 = s2); true7 System.out.println (S1 = = S3); False8 }9}
In the code above:
(1) S1 = = S2 is true because both S1 and S2 are references to the string literal "Nihao", pointing to the same piece of address, so they are equal.
(2) S1 = = S3 is false because the object generated by new is in the heap, S3 is a reference to the variables in the heap, but S1 is a reference to the string literal "Nihao", and the address is different so it is not equal.
2.equals ()
Equals is a method in the root class Obeject. The source code is as follows:
public boolean equals (Object obj) { return (this = = obj);}
The default Equals method is visible, calling = = directly, comparing the object address.
Different subclasses can override this method to make a judgment on the equals of two objects.
The Equals method overridden in the string class source code is as follows,
1 Public Boolean equals (Object anobject) {2 if (this = = AnObject) {3 return true; 4 } 5 if (anobject Instanceof string) {6 string anotherstring = (string) anobject; 7 int n = value.length; 8 if (n = = Anotherst Ring.value.length) {9 char v1[] = value;10 char v2[] = anotherstring.value;11 int i = 0;12 while (n-- ! = 0) { if (v1[i]! = V2[i]) return false;15 i++;16 }17 return true;18 }19 }20< C21/>return false;21 }
As you can see from the code above,
(1) equals in the String class first compares the address, and if it is a reference to the same object, the object is equal and returns true.
(2) If it is not the same object, the Equals method will compare the characters within the two string object, and return true only if it is exactly equal, otherwise false.
3.hashcode ()
Hashcode is a method in the root class Obeject.
By default, Hashcode () in object returns the 32-bit JVM memory addresses of the objects. That is, if the object does not override the method, 32 of the corresponding object is returned as the JVM memory address.
The Hashcode method that is overridden in the string class source code is as follows
1 public int hashcode () {2 int h = hash; Default to 0 # # # of private variables in string class, 3 if (h = = 0 && value.length > 0) { //private final char value[]; # # # An array of string contents saved in the Sting class 4 char val[] = value, 5 6 for (int i = 0; i < value.length; i++) {7 h = * H + Val[i]; 8 } 9 hash = h;10 }11 return h;12}
The string is immutable because it uses private final char value[];
Look at the following example, without overriding the class of the Hashcode method, directly returning the address of the 32-bit object in the JVM; the long class overrides the Hashcode method and returns the computed Hashcode value:
1 public class comhashcode{2 public static void Main (string[] args) throws Exception {3 Comhashcode a = new Comh Ashcode (); 4 Comhashcode B = new Comhashcode (); 5 System.out.println (A.hashcode ()); 870919696 6 System.out.println (B.hashcode ()); 298792720 7 8 Long num1 = new Long (8), 9 long num2 = new Long (8), System.out.println (num1.hashcode ()); 811 System.out.println (Num2.hashcode ()); 812 }13}
Summarize:
(1) binding. when the Equals method is overridden, it is often necessary to override the Hashcode method to maintain the general contract of the hashcode method, which declares that the equality object must have an equal hash code.
(2) reason for binding. Hashtable implements a hash table, in order to successfully store and retrieve objects in the Hashtable, objects used as keys must implement hashCode
methods and equals
methods. Same as (1), the object must be guaranteed equal to equals, hashCode
also equal. Because the hash table retrieves the object through Hashcode.
(3) Default.
= = Compares the address of the object in the JVM by default.
hashcode Default returns the storage address of the object in the JVM.
Equal compare objects, the default is to compare objects in the JVM address, with = =
Reference:
http://docs.oracle.com/javase/7/docs/api/
java = =, Equals (), hashcode () Source Code Analysis
In Java programming or interview often encounter = =, equals () comparison. I looked at the source code, the actual programming summary.
1. = =
= = In Java is the address that compares two objects in the JVM. Better understand. Look at the following code:
1 public class Comaddr{2 public static void Main (string[] args) throws Exception {3 String s1 = "Nihao"; 4 Stri ng s2 = "Nihao"; 5 string s3 = new String ("Nihao"); 6 System.out.println (S1 = s2); true7 System.out.println (S1 = = S3); False8 }9}
In the code above:
(1) S1 = = S2 is true because both S1 and S2 are references to the string literal "Nihao", pointing to the same piece of address, so they are equal.
(2) S1 = = S3 is false because the object generated by new is in the heap, S3 is a reference to the variables in the heap, but S1 is a reference to the string literal "Nihao", and the address is different so it is not equal.
2.equals ()
Equals is a method in the root class Obeject. The source code is as follows:
public boolean equals (Object obj) { return (this = = obj);}
The default Equals method is visible, calling = = directly, comparing the object address.
Different subclasses can override this method to make a judgment on the equals of two objects.
The Equals method overridden in the string class source code is as follows,
1 Public Boolean equals (Object anobject) {2 if (this = = AnObject) {3 return true; 4 } 5 if (anobject Instanceof string) {6 string anotherstring = (string) anobject; 7 int n = value.length; 8 if (n = = Anotherst Ring.value.length) {9 char v1[] = value;10 char v2[] = anotherstring.value;11 int i = 0;12 while (n--! = 0) { v1[i]! = V2[i]) return false;15 i++;16 }17 return true;18 }19 }20 return false;21 }
As you can see from the code above,
(1) equals in the String class first compares the address, and if it is a reference to the same object, the object is equal and returns true.
(2) If it is not the same object, the Equals method will compare the characters within the two string object, and return true only if it is exactly equal, otherwise false.
3.hashcode ()
Hashcode is a method in the root class Obeject.
By default, Hashcode () in object returns the 32-bit JVM memory addresses of the objects. That is, if the object does not override the method, 32 of the corresponding object is returned as the JVM memory address.
The Hashcode method that is overridden in the string class source code is as follows
1 public int hashcode () {2 int h = hash; Default to 0 # # # of private variables in string class, 3 if (h = = 0 && value.length > 0) { //private final char value[]; # # # An array of string contents saved in the Sting class 4 char val[] = value, 5 6 for (int i = 0; i < value.length; i++) {7 h = + * H + Val[i]; 8 } 9 hash = h;10 }11 return h;12}
The string is immutable because it uses private final char value[];
Look at the following example, without overriding the class of the Hashcode method, directly returning the address of the 32-bit object in the JVM; the long class overrides the Hashcode method and returns the computed Hashcode value:
1 public class comhashcode{2 public static void Main (string[] args) throws Exception {3 Comhashcode a = new Comh Ashcode (); 4 Comhashcode B = new Comhashcode (); 5 System.out.println (A.hashcode ()); 870919696 6 System.out.println (B.hashcode ()); 298792720 7 8 Long num1 = new Long (8), 9 long num2 = new Long (8), System.out.println (Num1.hashcode ( )); 811 System.out.println (Num2.hashcode ()); 812 }13}
Summarize:
(1) binding. when the Equals method is overridden, it is often necessary to override the Hashcode method to maintain the general contract of the hashcode method, which declares that the equality object must have an equal hash code.
(2) reason for binding. Hashtable implements a hash table, in order to successfully store and retrieve objects in the Hashtable, objects used as keys must implement hashCode
methods and equals
methods. Same as (1), the object must be guaranteed equal to equals, hashCode
also equal. Because the hash table retrieves the object through Hashcode.
(3) Default.
= = Compares the address of the object in the JVM by default.
hashcode Default returns the storage address of the object in the JVM.
Equal compare objects, the default is to compare objects in the JVM address, with = =
Reference:
Http://docs.oracle.com/javase/7/docs/api/\
Http://www.cnblogs.com/xudong-bupt/p/3960177.html
java = =, Equals (), hashcode () source Analysis (reproduced)