java中compareTo()出现诡异问题需要怎么解决

运行代码如下

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)