2016-08-04 4 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 

に等しいです。また助けが必要です!は対文字列のために等しい私たちは、Employeeクラスを上書きする必要があります知っているが、なぜそれがStringクラスのために働いていると私はStringクラスは、Oracleのドキュメントにメソッドをオーバーライド等号を見つけることができませんでし員/ OTHRクラスの

+2

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

+0

別のオブジェクトを宣言すると、条件に一致しません。また、2番目のオブジェクトをEmployee e2 = e1と宣言する場合はfalseを返します。それは真実を返す – Vickyexpert

答えて

0

最初に文字列をチェックしています。

2番目のケースでは、従業員のオブジェクトを確認しています。

2つのオブジェクトが異なるメモリアドレスを持つためです。

more details

0

String.equals() 2つの文字列がnullではありませんし、Oracleでのドキュメントで指定され、同じ文字シーケンスが含まれている場合はtrueを返します。これはObject.equals()異なる2つの参考文献は、参照メモリ内の同じオブジェクトを指す場合Object.equals()戻り真https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#equals(java.lang.Object)

+0

@candilusはOracleのドキュメントだけを探していたが、それを見つけることができなかった。幸運にも私はそれを見ることができる:) –

0

文字列は、文字列の内容を確認するためにequalsメソッドをオーバーライドするので、それはないとして、実施例の動作理由、一方EmployeeクラスはObject.equalsメソッドを使用してメモリの場所をチェックします。

0

異なるクラスは、2つのオブジェクトを「等しい」ものにするための異なる基準を持っています。通常、それは同じオブジェクトである場合は()がtrueを返すと等しい:

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

これは、彼らは両方とも「オブジェクト」クラスがある筈、彼らは同じインスタンスではありません、falseを返します。 a.equals(a)はtrueを返します。

ただし、文字列のようなケースでは、あなたが2つの異なるインスタンスを持つことができますが、文字列の平等は、それらの文字列を構成するリテラル文字に基づいています。

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

これらは、すべての文字列の異なるインスタンスであるが、最初のequalsは両方とも "example"なのでtrueを返しますが、 "example"は "another"ではないため2番目のものはありません。

関連する問題