码迷,mamicode.com
首页 > 其他好文 > 详细

比较运算符compareTo()、equals()、==之间的区别

时间:2017-04-17 13:07:32      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:常量   import   har   integer   imp   大小   结束   play   space   

一、== 和 equals的区别:

 ==主要是两个变量值的比较,返回值为true 或者是false。对于普通变量,如:int a=10; int  b= 10; a==b,返回为 true。

而对于下面情况:

String  a=new String("abc");

String  b=new String("abc");

String  c=a

String d="abc";

String f="abc";

a==b; 返回的则是一个false。这是因为,对于对象的比较是对对象引用的比较,对于a和b ,他们在内存中对应的地址是不一样的

c==a 返回的值是一个true,c引用了a,内存地址一样的

d==f  返回的值是一个ture,因为 d,f 在编译期放进了字符串常量池中,d,f都引用了字符串池的“abc”

a==f 返回的值是一个false,a和f引用的内存地址不一样

==操作符并不涉及对象内容的比较。若要对对象内容进行比较,则用equals. 如果 在本例中,a.equals(b)则返回是一个true值。

总而言之:==是对对象地址的比较,而equals是对对象内容的比较。对于基本数据类型,一般用==,而对于字符串的比较,一般用equals

二、对于compareTo(), 在API中,Java.lang包下面的基本数据类型的封装类都提供了该方法,如 Integer,Float,Byte,Short,Character 等

  compareTo()的返回值是int,它是先比较对应字符的大小(ASCII码顺序)
1、如果字符串相等返回值0
2、如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值(ascii码值)(负值前字符串的值小于后字符串,正值前字符串大于后字符串)
3、如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方全比较完,这时就比较字符的长度. 
例: 
String s1 = "abc"; 
String s2 = "abcd"; 
String s3 = "abcdfg"; 
String s4 = "1bcdfg"; 
String s5 = "cdfg"; 
System.out.println( s1.compareTo(s2) ); // -1 (前面相等,s1长度小1) 
System.out.println( s1.compareTo(s3) ); // -3 (前面相等,s1长度小3) 
System.out.println( s1.compareTo(s4) ); // 48 ("a"的ASCII码是97,"1"的的ASCII码是49,所以返回48) 
System.out.println( s1.compareTo(s5) ); // -2 ("a"的ASCII码是97,"c"的ASCII码是99,所以返回-2)

比较运算符compareTo()、equals()、==之间的区别

标签:常量   import   har   integer   imp   大小   结束   play   space   

原文地址:http://www.cnblogs.com/hqlong/p/6722138.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!