2016-08-04 37 views
0
public class Employee { 

    String name; 

public Employee(String var){ this.name=var;} 

} 

public class Main { 

    public static void main(String[] args){ 

     String s1=new String("joe"); 
     String s2=new String("joe"); 

     Employee e1=new Employee("joe"); 
     Employee e2=new Employee("joe"); 

     system.out.println("When comparing String obj:"+s1.equals(s2)); output:TRUE 

     system.out.println("When comparing Employee obj:+e1.equals(e2)): output:FALSE 

ich weiß, müssen wir Employee-Klasse außer Kraft setzen, aber warum es für String-Klasse arbeitet, und ich konnte die Methode equals nicht in der Lage in Oracle-Dokumentation für String-Klasse außer Kraft setzen lokalisieren auch. Bitte Hilfe benötigen !!gleich für String vs gleich für Angestellte/othr Klasse

+2

https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#equals(java.lang.Object)? – zerkms

+0

Wenn Sie ein separates Objekt deklarieren, stimmt es nicht mit der Bedingung überein und gibt false zurück, wenn Sie das zweite Objekt als Mitarbeiter e2 = e1 deklarieren; dann wird es wahr – Vickyexpert

Antwort

0

Im ersten Fall überprüfen Sie die Zeichenfolge.

Im zweiten Fall überprüfen Sie Objekt des Mitarbeiters.

weil zwei Objekte unterschiedliche Speicheradresse haben.

more details

0

String.equals() gibt true zurück, wenn die beiden Strings nicht null sind und die gleiche Abfolge von Zeichen enthalten, wie in der Dokumentation von Oracle angegeben. Dies unterscheidet sich von Object.equals(): Object.equals() gibt true zurück, wenn zwei Referenzen auf dasselbe Objekt im Speicher zeigen, siehe https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#equals(java.lang.Object)

+0

Dank @candilus war in Oracle Docs nur suchen, aber konnte nicht finden. Luckily kann ich es jetzt sehen :) –

0

Der Grund das Beispiel funktioniert, wie es funktioniert, weil String die Methode equals überschreibt den Inhalt der String zu überprüfen, während Die Employee-Klasse verwendet die Object.equals-Methode, die den Speicherort überprüft.

0

Verschiedene Klassen haben unterschiedliche Kriterien für das, was zwei Objekte "gleich" macht. Normalerweise equals() gibt true zurück, wenn es das gleiche Objekt ist:

Object a = new Object(); 
Object b = new Object(); 
return(a.equals(b)); 

Dies wird return false, obwohl sie beide „Objekt“ Klassen sind, sind sie nicht die gleiche Instanz. a.equals (a) gibt true zurück.

jedoch in Fällen wie ein String, können Sie 2 verschiedene Instanzen haben aber String Gleichheit auf den wörtlichen Zeichen basieren, die diese Strings bilden:

String a = new String("example"); 
String b = new String("example"); 
String c = new String("another"); 
a.equals(b); 
a.equals(c); 

Diese sind alle verschiedenen Instanzen von String, aber die erste Gleichheiten werden als wahr zurückgegeben, weil sie beide "Beispiele" sind, aber die zweite wird nicht, weil "Beispiel" nicht "eine andere" ist.