2010-11-28 50 views
2

以下是我刚才编造的一个人为的例子,它可以帮助我理解java的内部工作原理。Java:将一个数组传递给println

public class Main { 

    public static void main(String[] args) { 
     int[] a; 
     a = new int[12]; 
     System.out.println(a); 


    } 
} 

这会打印出一些垃圾。由于a通过引用传递,我假设println获取a的内存地址,并将其作为字符串进行威胁。我就在这里?你能详细说明究竟发生了什么吗?谢谢。 (注:我对如何打印阵列不感兴趣,我知道)

回答

5

一个数组被视为一个对象,所以默认结果Object#toString()将被用作字符串表示。另请参阅Javadoc的此提取(请点击链接):

类Object的toString方法返回一个字符串,其中包含对象为实例的类的名称,符号字符`@ ',以及对象的哈希码的无符号十六进制表示。换句话说,该方法返回一个字符串等于值:

getClass().getName() + '@' + Integer.toHexString(hashCode()) 

达到你想要什么,而使用Arrays#toString()

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

是的,它是打印内存地址。请参阅Q &这里的一节:http://www.cs.princeton.edu/introcs/14array/使用Arrays.toString(a)将数组a转换为String,如果要输出数组的内容,可以打印此数字。

+1

不是内存地址,但散列码(可能是一个地址,不能)... – 2010-11-28 15:46:08

0

println()调用toString()方法不管你传递给它。在数组的情况下,这会产生一些表示数组对象的散列码。

相关问题