这里主要是总结一些常见的比较及其区别:
等号“==”的比较
使用“==”能够进行比较的是常见的基本数据类型,比较的是变量的内存地址。
Object的equals()方法
在Object类中equals()方法的作用和“==”一样,比较的也是变量的内存地址。
String中的比较方法
- str.equals(String otherstr)
String将继承于Object的equals方法重写了,使其能够直接比较两个字符串的内容。结果返回true或者false。 - str.equalsIgnoreCase(String otherstr)
忽略大小写,如果两个字符串具有相同的字符和长度,返回true。 - str.compareTo(String otherstr)
该方法为按字典顺序比较两个字符串,该比较是基于字符串中各个字符的Unicode值,如果String对象位于参数字符串之前,比较结果为负整数;如果按字典顺序此String对象位于参数字符串之后,则比较结果为正整数,如果相等,结果为0。 - “==”比较
==比较的是两个String对象的引用地址
代码举例:
String s1=new String("123");
String s2=new String("123");
String s3=s2;
System.out.println(s1==s2); //false
System.out.println(s1.equals(s2)); //true
System.out.println(s3==s2); //true
这里对于String的比较还有一种情况要说明一下
String s1="java";
String s2="java";
System.out.println(s1==s2); //true
System.out.println(s1.equals(s2)); //true
第一次定义的“java”,会被放入字符串池(缓存池)中,当再次定义s2时,这是它会先去寻找字符串池中是否已经存在“java”,如果存在,则返回字符串池中“java”的地址引用,因此str1==str2也就成立。
包装类中的比较方法
包装类(Integer、Boolean、Byte、Character、Double、Number)的数据比较
- “==”比较式,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。
- equals比较
包装类也重写了equals方法,所以调用equals方法时,比较的是包装类实际的数据值
Integer i1=new Integer(12);
Integer i2=new Integer(12);
System.out.println(i1==i2); //true
System.out.println(+i1.equals(i2)); //false