运行代码如下
String a ="6";
String b="50";
if (a.compareTo(b) < 0) {
System.out.println("a<b");
}else {
System.out.println("a>=b");
}
正常情况下,a=6,b=9可以正常输出a<b
但是上面那种情况下,竟然输出a>=b
有什么办法能让程序正常判断?
字符串的comparTo方法,是从左到右一个一个字符比较的,不比长度的;a的第一个字符6大于b的第一个字符5,所以a>=b
代码可如下
String a ="6";
String b="50";
if(a.length() == b.length()){
//一样长,使用compareTo比较
if (a.compareTo(b) < 0) {
System.out.println("a<b");
}else {
System.out.println("a>=b");
}
}else {
//不一样长,按长度比较
if (a.length() < b.length())) {
System.out.println("a<b");
}else {
System.out.println("a>=b");
}
}
compareTo() 方法用于两种方式的比较:
字符串与对象进行比较。
按字典顺序比较两个字符串。
返回值
如果参数字符串等于此字符串,则返回值 0;
如果此字符串小于字符串参数,则返回一个小于 0 的值;
如果此字符串大于字符串参数,则返回一个大于 0 的值。
如果第一个字符和参数的第一个字符不等,结束比较,返回第一个字符的ASCII码差值。
如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至不等为止,返回该字符的ASCII码差值。 如果两个字符串不一样长,可对应字符又完全一样,则返回两个字符串的长度差值。
注意,最终比较使用的是ASCII码值,所以不能只看表面,建议直接看源码理解
还有,想比较数字就转化成数字,不要给自己增加难度,本来人生就够难了已经~
你到底什么目的,"6"为什么要比"50"大,什么规则?
如果你需要判断里面的数字大小,先转int啊
你判断字符串大小,6就是比5大
你这个是字符串比较大小,不是数字比较大小,
字符串比较大小是从第一个开始比。
第一个字符6比5大,所以后面的就不比了,进入输出"a>=b"的分支。
compareTo参数是String类型时,是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符一样,则继续比较第二个字符,以此类推。这里字符"6">"5"(ASCII码),所以输出大于等于。
字符串比较是先比较第一个的大小,如果一样才比较下一位的字符。'6'>'5 ',所以就返回了;要比较数字就需要先转化为数子类型(int)