Java中==运算符与equals方法的区别及intern方法详解
Java中==运算符与equals方法的区别及intern方法详解
1. ==运算符与equals()方法
2.hashCode()方法的应用
3.intern()方法
/* Comefromxixifeng.com Author:习习风(StellAah) */ publicclassAboutString2 { publicstaticvoidmain(String[]arsgs) { StringmyName="xixifeng.com"; StringmyName3="xixifeng"; StringmyName4=".com"; StringmyName5=myName3+myName4; StringmyName6="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型运算中,也营造类似的比较 inti=8; intj=3; intk=5; intm=j+k; intn=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得出truei==n得出true //所以可以得出结论:==参与非对象类型运算时,是用来比较常量的值是否相等 } }
综上所属,得出如下结论:
1)==运算符参与对象类型运算时是用来比较对象是否想得的.
2)==运算符参与非对象类型运算时是用来比较值是否相等的.
3)equals()方法用于比较两个对象的值是否相等
4)两个对象的hashCode()值相等,并不代表其对象也相等
5)intern()方法能使两个(对象不相等而值相等的)对象变得相等,从而可以公用内存已有的对象,这样做可以节约内存资源.
6)对象在间接赋予(有可能与已有对象)同样的值的时候,建议用一下intern()方法,从而可公用内存中存在的对象.
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!