java String数组sort排序错误

muqianxiaoniu2018 2016-03-26 11:22:37
新手请教2个问题:
1:为什么打印值是hash值,那个是干什么用的,如何打印出字符串数组?
2:sort排序为什么是错的,6为什么在中间?
[color=#FF0000]
[/color]
...全文
558 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_28574589 2016-03-27
  • 打赏
  • 举报
回复
Arrays.toString(输出的内容)
binbinxyz 2016-03-27
  • 打赏
  • 举报
回复
关于第一个问题: 字符串数组是引用类型,直接打印的话会输出该引用对象的引用地址信息而非内容,如果需要查看内容可以使用Arrays.toString(),即: System.out.println(java.util.Arrays.toString(newStr)); 关于第二个问题: 你的代码是对字符串按逗号拆分后的字符串数组进行排序,此时排序规则是按字典序进行的。所以55<6<66。 实际上,你想要的是按他们的数值大小进行排序吧?也就是说把字符串数组转换成int数组,然后再按你的排序方法进行排序就可以得到你想要的结果了。 顺便回答一下@MengJun1: 这个不是BUG!是正常结果,只是写代码时运用不当造成的。
三仙半 2016-03-27
  • 打赏
  • 举报
回复
下面是String类中实现的Comparable接口中的compareTo()方法,仔细看一下就知道为什么是这样的了。

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) {
            char c1 = v1[k];
            char c2 = v2[k];
            if (c1 != c2) {
                return c1 - c2;
            }
            k++;
        }
        return len1 - len2;
    }
梦君DS 2016-03-27
  • 打赏
  • 举报
回复
第一个是因为字符串数组属于引用类型,他的直接打印结果是输出他的引用地址。是有关哈希值的一个值。如果想正确输出,需要重写toString方法,当然可以调用arrays.toString(数组名),这个已经重写了方法。 第二个我也试了一下,发现问题不在于6,而是所有11,22,33,44,55,66,77,88,99,重复数字,经过排序他都当成1,2,3,4,5,6,7,8,9来算,具体我也不清楚,难道是bug?????
qq_22862543 2016-03-27
  • 打赏
  • 举报
回复
1:为什么打印值是hash值, 准确的来讲打印的是,对象的名称+"@"+对象hashCode的16进制编码, 如何打印出字符串数组的值 Arrays.toString(数组对象引用) 2:sort排序为什么是错的,6为什么在中间? 排序是正确的,因为是字符数组,排序的规则是根据字符串来的, 如果你想要根据数值大小排序的话,因该换成 整型数组

public class Test {
    public static void main(String[] args) {
        int[] str = new int[] {6,5,4,3,1,99,88,77,66,55,2};
//        String newStr = "6,5,4,3,1,99,88,77,66,55,2";
//        String[] str = newStr.split(",");
        Arrays.sort(str);
        System.out.println(Arrays.toString(str));
    }
}

打印结果
qq_28574589 2016-03-26
  • 打赏
  • 举报
回复
加上toArray(),可以输出,字符串排序规则就那样如:1,11,2,22,3

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧