Java中compareTo用法及源码解析

最近遇到一个问题,在日期比较的时候,很麻烦,因为日期比较没有大于等于,只有大于或者小于,这就导致在比较时间的时候特别麻烦,而且还要由string转成date格式才能比较,下面是我使用compareTo比较时间字符串的代码:

    String putStartTime = DateUtil.formatDate(adverInformation.getPutStartTime());
	String putEndTime = DateUtil.formatDate(adverInformation.getPutEndTime()); 
	String currentTime = DateUtil.getCurrentTime("yyyy-MM-dd");
	int compareTo = putStartTime.compareTo(currentTime);
	int compareTo2 = currentTime.compareTo(putEndTime); 
			
   if(compareTo>0 || compareTo2>0) {
		adverInformation.setAdverStatus(AdverConst.ADVER_STATUS_OUTLAUNCH);
	}else {
		adverInformation.setAdverStatus(AdverConst.ADVER_STATUS_INLAUNCH);
	}

下面来看一下源码:

  public int compareTo(String anotherString) {
        int len1 = value.length;//获取第一个参数的字符串长度
        int len2 = anotherString.value.length;//获取第二份字符串长度
        int lim = Math.min(len1, len2);//获取两者字符串长度最短的
        char v1[] = value;//第一个参数的值
        char v2[] = anotherString.value;//第二个参数的值

        int k = 0;
        while (k < lim) {//获取长度最短的,然后和0、1、2、3..比较
            char c1 = v1[k];
            char c2 = v2[k];
            if (c1 != c2) {
                return c1 - c2;//比较当前参数的第K位知否相等,如果相等,则继续++,如果不想等,则直接返回差值
            }
            k++;
        }
        return len1 - len2;//如果参数前面的几位字符都是一样的话,那就直接用两个参数的长度相减
    }

以下是几个典型的例子仅供参考:

java中的compareto方法,返回参与比较的前后两个字符串的asc码的差值

String a = "a";
String b = "b";
System.out.println(a.compareTo(b));
输出值-1

String a = "b";
String b = "a";
System.out.println(a.compareTo(b));
输出值1


String a = "a";
String b = "a";
System.out.println(a.compareTo(b));
输出0


两个字符串首字母不同,则该方法返回首字母的asc码的差值
String a = "abc";
String b = "bcdfg";
System.out.println(a.compareTo(b));
输出-1

参与比较的两个字符串如果首字符相同,则比较下一个字符,直到有不同的为止,返回该不同的字符的asc码差值
String a = "abcdef";
String b = "abe";
System.out.println(a.compareTo(b));
输出-2

两个字符串不一样长,可以参与比较的字符又完全一样,则返回两个字符串的长度差值
String a = "abc";
String b = "abcdefg";
System.out.println(a.compareTo(b));
输出-4
String a = "abcde";
String b = "abcd";
System.out.println(a.compareTo(b));
输出1

目前compareTo项目中的用途是比较版本号的高低
String a = "1.0.0";
String b = "1.0.1";
System.out.println(a.compareTo(b));
输出-1

日期比较,跟字符串比较基本类似,a日期在b后面,所以返回1
String a = "2018-08-23";
String b = "2018-08-15";
System.out.println(a.compareTo(b));
输出1

总结:返回整数则说明a大于b,返回0则表示a等于b,返回负数则表示a小于b。
坑位:compareTo比较返回的值不仅仅只有1、0、-1,最好判断是大于0还是小于0

你可能感兴趣的:(java)