【问题标题】:Printing all elements of an array in one println statement in Java [duplicate]在Java中的一个println语句中打印数组的所有元素[重复]
【发布时间】:2015-02-25 04:53:32
【问题描述】:
public class Test {

    public static void main(String[] args) {

        int[] a= new int[]{1,2,3};

        System.out.println(a);


    }
}

我预计会出现编译或运行时错误。我得到了一个输出。它是“[I@1ba4806”。在 Java 中它的原因是什么?

【问题讨论】:

    标签: java arrays


    【解决方案1】:

    我得到了一个输出。它是“[I@1ba4806”。Java 中的原因是什么?

    System 类中的out 静态字段是PrintStream 的实例,PrintStream 类中没有println(int[]) 方法可以为您遍历传递数组中的所有元素并打印它们,但是有println(Object o) 尝试将传递的对象 oconvert 转换为字符串,然后将其打印。

    为此,此方法使用String.valueOf(o) 方法,如果o 为空,将返回“null”字符串,或者如果o 不为空(如您的示例中),它将返回结果toString() 从传递的对象调用的方法。所以System.out.println(a); 打印a.toString() 的结果。

    现在为什么数组有toString() 方法?好吧,它是从Object 类继承的(因为所有数组都扩展了对象)。此外,数组不会覆盖此方法,它们以在 Object 类中实现的方式保留它,因此它的代码看起来像

    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
    

    如您所见,它返回TypeName@hexadecimalHash。一维整数数组表示为[I,其中[ 的数量决定了维数,I 表示int 类型。


    如果你想打印数组的内容,你要么必须遍历所有元素并打印它们

    for (int i = 0; int < array.lenght; i++){
        System.out.println(array[i]);
    }
    

    for (int element : array){
        System.out.println(element);
    }
    

    或者您可以使用Arrays.toString(int[]) 方法,它会为您执行此操作并生成[1, 2, 3, ....] 形式的字符串,因此您需要做的就是像这样打印它

    System.out.println(Arrays.toString(a));
    

    【讨论】:

      【解决方案2】:

      预计会出现编译或运行时错误。我已输出。它是 "[I@1ba4806"。Java 里面是什么原因?

      因为目前正在调用 Object 类的 toString 方法,所以看起来像这样

      public String toString() {
          return getClass().getName() + "@" + Integer.toHexString(hashCode());
      }
      

      这就是你看到[I@1ba4806的原因

      您可以使用Arrays.toString 打印数组内容,这是Arrays 类中的重载方法来打印数组。

      System.out.println(Arrays.toString(a));
      

      对于int[]参数,方法实现看起来像

      public static String toString(int[] a) {
          if (a == null)
              return "null";
          int iMax = a.length - 1;
          if (iMax == -1)
              return "[]";
      
          StringBuilder b = new StringBuilder();
          b.append('[');
          for (int i = 0; ; i++) {
              b.append(a[i]);
              if (i == iMax)
                  return b.append(']').toString();
              b.append(", ");
          }
      }
      

      【讨论】:

        【解决方案3】:

        它尝试打印一个数组。

        如果您想获得可读的结果,请使用

        System.out.println(Arrays.toString(a));
        

        【讨论】:

          【解决方案4】:

          这是您看到的ObjecttoString() 的默认实现。您可以使用Arrays.toString 获得可读结果(确保导入java.util.Arrays):

          System.out.println(Arrays.toString(a));
          

          【讨论】:

            猜你喜欢
            • 2014-05-05
            • 1970-01-01
            • 1970-01-01
            • 2012-09-25
            • 1970-01-01
            • 2021-05-03
            • 2012-06-09
            • 1970-01-01
            • 2012-05-13
            相关资源
            最近更新 更多