compareTo,equals和==

首先看下面一段代码:

String s1 = new String("123");
String s2 = new String("123");
System.out.println(s1==s2);

输出结果:false

==主要是两个变量值的比较,返回值为true 或者是false。对于普通变量,如:int a=10; int b= 10; a==b,返回为 true。而对于上面的情况返回的则是一个false。这是因为,对于对象的比较是对对象引用的比较,对于s1和s2 ,他们在内存中对应的地址是不一样的,所以 s1==s2 返回的值是一个false。

compareTo,equals和==_第1张图片

==操作符并不涉及对象内容的比较。若要对对象内容进行比较,则用equals。如下:

String s1 = new String("123");
String s2 = new String("123");
System.out.println(s1.equals(s2));

输出结果:true

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

equals只返回 true or false。compareTo函数的作用就是对两个字符串按字典排序的方式进行比较,返回两个字符串中第一个不同的字符的ascII码差值。

下面有程序代码看看测试结果:

public class equals_compareTo {    
    public static void main(String[] args) {    
        String a = "abcd";    
        String b = "abcd";    
    
        String c = new String("abcd");    
        String d = new String("abcd");    
    
        String e = c;    
        String f = "absd";    
    
        System.out.println("a.equals(b): " + a.equals(b));//a和b在字面上的每个字母都是相同的,所以返回TRUE    
        System.out.println("b.equals(c): " + b.equals(c));//c和b在字面上的每个字母都是相同的,所以返回TRUE    
    
        System.out.println("a == b: " + (a == b));//此处为什么会返回TRUE呢,原因是我们先定义了a="abcd",当我们再次定义b="abcd"是,系统检测到已经在内存中存在了相同的"abcd",所以b会直接引用已有的"abcd"    
    
        System.out.println("a == c: " + (a == c));//a和c不是引用的同一个对象,所以false    
        System.out.println("a == f: " + (c == d));//d和c不是引用的同一个对象,所以false    
    
        System.out.println("c == e: " + (c == e));//e引用c,所以比较会返回true    
    
        System.out.println("f.compareTo(c): " + f.compareTo(c));//比价结果是16,即第一个不同的字母s与c的ascII码差值    
        System.out.println("a.compareTo(c): " + a.compareTo(c));//ac值相同,返回0    
    }    
}    

你可能感兴趣的:(compareTo,equals和==)