3

我正在使用 System.out.println(arr) 打印一维字符数组,并且我得到了数组中的字符(不是空格分隔的)。当我通过添加“/t”来做同样的事情时,输出会发生变化,现在它会打印 char 数组的地址。

我尝试使用 System.out.println(arr) 打印一维整数数组,但结果不同,它打印了数组在内存中的位置。

请说明发生了什么以及如何实施。

import java.io.*;
import java.math.*;
import java.util.*;
import java.lang.*;

class Main3{ 

    public static void main(String[] args)throws java.lang.Exception{
        int[] intArr = {1,2,3,4};
        char[] charArr = {'a' , 'b' };
        System. out.println(intArr);             // prints the address of the intArr
        System. out.println(charArr);            // prints the charArr contents 
        System.out.println("\t" + charArr);      // prints the address of the charArr after a tab
    }
}
4

3 回答 3

2

PrintStream有一个接受char[].

但是,当您执行"\t" + charArrayjava 尝试执行String concatenation时。为此,它首先必须使用Object#toString方法(JLS 5.1.11charArray )转换为字符串。然后它将字符串传递给.println

于 2013-10-22T19:37:43.180 回答
2

以下打印语句:

System.out.println(charArr);

调用PrintStream#println(char[])方法。从文档中:

字符按照平台默认的字符编码转换成字节,这些字节完全按照方法的方式写入write(int)

而下一个打印语句:

System.out.println("\t" + charArr); 

通过调用类的方法将 转换charArray为,因为数组不会覆盖它。然后调用该方法。StringtoString()ObjectPrintStream#println(String)

所以,上面的打印语句等价于:

System.out.println("\t" + charArr.toString()); 

查看该Object#toString()方法以了解它如何形成数组的字符串。

于 2013-10-22T19:38:51.857 回答
-1

访问数组元素的方法是使用括号表示法。因此,例如,如果您想在 intArr 的索引 0 处获取 int,您可以编写

System.out.println(intArr[0]);

其中括号中的数字是您想要的元素的索引,或者您可以使用

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

只要数组中的内容不是对象,这将起作用 - 在这种情况下,它将打印地址。

于 2013-10-22T19:51:14.453 回答