欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java中==运算符与equals方法的区别及intern方法详解

程序员文章站 2024-02-29 13:18:46
java中==运算符与equals方法的区别及intern方法详解 1.  ==运算符与equals()方法 2. hashcode()方法的应用 3. i...

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()方法用于比较两个对象的值是否相等
4) 两个对象的hashcode()值相等,并不代表其对象也相等
5) intern()方法能使两个(对象不相等而值相等的)对象变得相等,从而可以公用内存已有的对象,这样做可以节约内存资源.
6) 对象在间接赋予(有可能与已有对象)同样的值的时候,建议用一下intern()方法,从而可公用内存中存在的对象.

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!