为什么 Stringbuilder 显示这样的输出。[000000[I@232204a1[I@232204a1[I@232204a1[I@232204a1]

Why Stringbuilder is displaying output like this.[000000[I@232204a1[I@232204a1[I@232204a1[I@232204a1]

我正在尝试将 int 转换为指定长度的位并使用 StringBuilder 存储它们。但我的输出不是位串而是显示一些随机数据。 我参考了这个答案

 static StringBuilder final_string = new StringBuilder();
public static void main (String[] args) {
    int[] values = {2,4,7,8};
    int[] length = {8,10,10,7};
    appendString(values, '0', length);
}

public static void appendString(int[] in, char padChar, int[] length) {
    for(int j = 0; j< in.length;j++){
       String temp =Integer.toBinaryString(in[j]);
        int temp_length = length[j];
         StringBuilder sb = new StringBuilder(temp_length);
          sb.append(in);
            for (int i = temp.length(); i < temp_length; i++) {
             sb.insert(0, padChar);
             }
            final_string.append(sb);
   }
   System.out.println((final_string.toString()));

}

以上代码的输出是: 000000[I@232204a1[I@232204a1[I@232204a1[I@232204a1

预期输出为: 00000010 0000000100 0000000111 0001000

两个错误:

1sb.append(in);

您正在追加整个数组,这意味着只向编译器添加地址 (@xxxxxx)。您是说 sb.append(in[j]); 吗?

2final_string.append(sb);

您不能按照您假设的方式将 StringBuilder 附加到另一个。这样你实际上是在使用 StringBuilder append(Object obj),所以它只是将它附加为一个对象,这也意味着作为一个地址或类似的东西。考虑改用 final_string.append(sb.toString());final_string.append(sb.substring(0));

希望我能帮到你