Java中==演算子とequalsメソッドの違いとinternメソッドの詳細

4615 ワード

Java中==演算子とequalsメソッドの違いとinternメソッドの詳細
1.  ==演算子とequals()メソッド2.hashCode()メソッドの適用3.intern()メソッド

/* 
Come from xixifeng.com 
Author:    (StellAah) 
*/ 
public class AboutString2  
{ 
  public static void main(String[]arsgs) 
  { 
    String myName="xixifeng.com"; 
    String myName3="xixifeng";  
    String myName4=".com"; 
    String myName5=myName3+myName4; 
    String myName6="xixifeng.com"; 
     
    if(myName==myName5) 
    { 
       
      System.out.println("myName==myName5"); 
    } 
    else 
    { 
      System.out.println("myName="+myName); 
      System.out.println("myName5="+myName5); 
      System.out.println("myName!=myName5"); 
    } 
    //      : myName!=myName5 
     
    if(myName==myName6) 
    { 
      System.out.println("myName==myName6"); 
    } 
    else 
    { 
      System.out.println("myName!=myName6"); 
    } 
    //     : myName!=myName5,myName==myName6 
     
    //myName,myName5(myName5    myName3+myName4   ),myName6            ,          ==         myName!=myName5,myName==myName6 ? 
    //    ==    
    //  ==  String           ,             . 
    //   String   ,                  ,java    equals()   ,               
    //    : 
    //myName==myName5  false (       ) 
    if(myName.equals(myName5)) 
    { 
      System.out.println("myName.equals(myName5)       true !"); 
    } 
    else 
    { 
      System.out.println("myName.equals(myName5)       false !"); 
    } 
    //     :myName.equals(myName5)       true !    myName myName5       ,    : 
    //equals()  [             ] 
     
    //     :                        ? 
    //(     myName==myName5   false ①  myName myName5       ) 
    System.out.println(myName.hashCode()); 
    System.out.println(myName5.hashCode()); 
    //    ②myName myName5       
    // ①,②   :      hashCode   ,          . 
 
    //    :    myName myName5      ? 
    //  intern()   
    myName5=myName5.intern(); 
    if(myName==myName5) 
    { 
       
      System.out.println("(myName==myName5)  true"); 
    } 
    else 
    { 
      System.out.println("(myName==myName5)  false"); 
    } 
    //      : (myName==myName5)  true 
    //  : intern()      (          )       
    //myName5.intern();   ,     : myName5            ,   ,           .    ,      . 
    //myName5    ,   ,         ,      ,        . 
     
    //    :           intern() ? 
    // myName="xixifeng.com" myName6="xixifeng.com", myName myName6       ,      . 
    //    ,                   intern(). 
    //myName="xixifeng.com" myName5=myName3+myName4,      ,       ,      . 
    //   ,        (        )       ,     intern()  ,             . 
     
     
    //==  int    ,         
    int i=8; 
    int j=3; 
    int k=5; 
    int m=j+k; 
    int n=8; 
    if(i==m) 
    { 
      System.out.println("i="+i); 
      System.out.println("m="+m); 
      System.out.println("i==m"); 
    } 
    else 
    { 
      System.out.println("i!=m"); 
    } 
     
    if(i==n) 
    { 
      System.out.println("... ... ... ..."); 
      System.out.println("i="+i); 
      System.out.println("n="+n); 
      System.out.println("i==n"); 
    } 
    else 
    { 
      System.out.println("i!=n"); 
    } 
    //     i=m(m   j+k  ),i=n 
    //i,m,n      ,   i==m   true i==n  true  
    //        : ==          ,                 
  } 
} 

所属をまとめると、以下の結論が得られた.
1)==演算子がオブジェクトタイプ演算に関与する場合は、オブジェクトが考えているかどうかを比較するために使用されます.2)==演算子が非オブジェクトタイプ演算に関与する場合は、値が等しいかどうかを比較するために使用されます.3)equals()メソッドは、2つのオブジェクトの値が等しいかどうかを比較するために使用されます.4)2つのオブジェクトのhashCode()値が等しいことは、オブジェクトが等しいことを意味しません.5)intern()メソッドは、2つのオブジェクトを(オブジェクトが等しくない値が等しい)オブジェクトが等しくなることで、メモリの既存のオブジェクトを共通メモリとすることができ、メモリリソースを節約することができる.6)オブジェクトが(既存のオブジェクトと同じ値を間接的に与える場合、intern()メソッドを用いることで、メモリに存在するオブジェクトを共通メモリとすることができることを提案する.
読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!