为什么toString()不打印这个int数组?

时间:2015-02-28 20:32:18

标签: java

作为一名新的Java程序员,在处理Euler问题时,我遇到了一些与打印数组有关的特殊内容。

我不明白为什么会发生这种情况 - 个别值在单独打印时看起来是正确的,但toString()显然正在创建一个不符合我预期的字符串。

我原本期望编译错误,或者将数组放入连接列表中。这些都没有发生。

注意:我对"如何打印数组不感兴趣?"而是理解为什么toString()不打印数组。网上有大量资源可供查找。

public class example {

    public static void main(String[] args) {

        /* Setup a string/int array converion*/
        int i=0;
        String nums = "123456";
        char[] splitNums = nums.toCharArray();
        int[] ints = new int[nums.length()];

        for (char c : splitNums) {
            ints[i++] = Character.digit(c,10);
        }

        //Print using the string/char[]
        System.out.println(nums);
        System.out.println(splitNums);

        //Values are clearly there
        for (int j : ints){
            System.out.println(j);
        }

        //What is toString() doing? 
        System.out.println(ints.toString());

    }

}

输出:

123456
123456
1
2
3
4
5
6
[I@4b71bbc9

2 个答案:

答案 0 :(得分:3)

您看到的输出[I@4b71bbc9是方法Object.toString()的输出。数组是Java中的对象,但它们没有自己的toString()方法实现 - 所以调用java.lang.Object的版本,打印出这种输出(参见{ {3}})。

要打印数组,请改为:

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

答案 1 :(得分:2)

打印对象时会隐式调用

toString()。由于ints是一个数组(被视为对象)而不是原始数据。

ints置于println语句中时,将调用从类对象继承的toString()方法,打印您在屏幕上看到的内容。

那为什么它继承自Class Object?

这是因为Java中的每个类都隐式地从Class Object扩展。


要使用println语句打印数组,可以执行以下操作:

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

它会很好地打印出格式化的数组:

示例:

[0, 1, 2, 3, 4]

关于toString()

  

toString()方法返回对象的字符串表示形式。通常,toString方法返回一个“文本表示”此对象的字符串。结果应该是一个简洁但信息丰富的表示,便于人们阅读。

- 来自toString的API -

因此,通常,toString()方法使打印对象有意义且可在文本上理解对象所代表的内容。但是,在打印String对象和char数组等对象时会有一些例外。原因是不言自明的(String已经在String中)