草莓果冻⁣ 
2021-09-29 10:46
采纳率: 66.7%
浏览 41
已结题

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
有什么办法能让程序正常判断?

  • 好问题 提建议
  • 收藏

6条回答 默认 最新

  • 饶小乖 2021-09-29 10:51
    已采纳

    字符串的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");
                }
            }
           
    
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 於黾 2021-09-29 10:48

    你到底什么目的,"6"为什么要比"50"大,什么规则?
    如果你需要判断里面的数字大小,先转int啊
    你判断字符串大小,6就是比5大

    评论
    解决 无用
    打赏 举报
  • 两个猕猴桃 2021-09-29 10:54

    你这个是字符串比较大小,不是数字比较大小,
    字符串比较大小是从第一个开始比。
    第一个字符6比5大,所以后面的就不比了,进入输出"a>=b"的分支。

    评论
    解决 无用
    打赏 举报
  • 难浅 2021-09-29 10:55

    compareTo参数是String类型时,是先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符一样,则继续比较第二个字符,以此类推。这里字符"6">"5"(ASCII码),所以输出大于等于。

    评论
    解决 无用
    打赏 举报
  • 爷就是这个范儿 2021-09-29 11:01

    字符串比较是先比较第一个的大小,如果一样才比较下一位的字符。'6'>'5 ',所以就返回了;要比较数字就需要先转化为数子类型(int)

    评论
    解决 无用
    打赏 举报
  • BCS-点心 2021-09-29 11:01

    compareTo() 方法用于两种方式的比较:
    字符串与对象进行比较。
    按字典顺序比较两个字符串。

    返回值
    如果参数字符串等于此字符串,则返回值 0;
    如果此字符串小于字符串参数,则返回一个小于 0 的值;
    如果此字符串大于字符串参数,则返回一个大于 0 的值。

    如果第一个字符和参数的第一个字符不等,结束比较,返回第一个字符的ASCII码差值。
    如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至不等为止,返回该字符的ASCII码差值。 如果两个字符串不一样长,可对应字符又完全一样,则返回两个字符串的长度差值。

    注意,最终比较使用的是ASCII码值,所以不能只看表面,建议直接看源码理解
    还有,想比较数字就转化成数字,不要给自己增加难度,本来人生就够难了已经~

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题