Java 在数组索引处打印值将返回哈希代码

Java 在数组索引处打印值将返回哈希代码,java,arrays,int,hashcode,Java,Arrays,Int,Hashcode,在二维数组中显示值时,注意到我的代码打印了一些hashcode,然后是值。但我并没有打印数组对象本身(如本文所述),或者至少没有显式调用数组对象的toString或hashcode方法。相反,我使用arrayObj[I]和arrayObj[I][j]直接访问和打印数组中的值 这是我的密码: class PrintTwoDimArray { public int [][] createArray () { int counter = 0; int[][] i

在二维数组中显示值时,注意到我的代码打印了一些
hashcode
,然后是值。但我并没有打印数组对象本身(如本文所述),或者至少没有显式调用数组对象的
toString
hashcode
方法。相反,我使用
arrayObj[I]
arrayObj[I][j]
直接访问和打印数组中的值

这是我的密码:

class PrintTwoDimArray {
    public int [][] createArray () {
        int counter = 0;
        int[][] intArray = new int [2][4];
        for (int i = 0; i < intArray.length; i++) {
            for (int j = 0; j < intArray[i].length; j++) {
                intArray[i][j] = ++counter;
            }
        }
        return intArray;
    }
    public void printArray ( int [][] arrayObj ) {
        for (int i = 0; i < arrayObj.length; i++) {
            System.out.print(arrayObj[i] + " ");
            for (int j = 0; j < arrayObj[i].length; j++) {
                System.out.print(arrayObj[i][j] + " ");
        }
        System.out.println();
        }
    }
}

class TestPrintTwoDimArray {
    public static void main (String[] args) {
    
    PrintTwoDimArray twoDim = new PrintTwoDimArray();
    int [][] multiArray = new int [2][4];
    multiArray = twoDim.createArray();
    twoDim.printArray(multiArray);
    }
}
类PrintTwoDimArray{
公共int[][]创建数组(){
int计数器=0;
int[]intArray=新int[2][4];
for(int i=0;i
我的输出如下:

我的代码似乎在某种程度上调用数组的
toString
hashcode
方法。思想?如何修改以仅打印值


javac和java 1.8.0版

哈希值来自您的第一个System.print语句

系统输出打印(arrayObj[i]+“”)

通过这句话,您正在打印一个对象(数组),因此Java正在调用默认的toString方法。

打印时

arrayObj[i]
从数组中获取默认的
对象
toString()
。你可以用它来做一个
字符串

System.out.println(Arrays.toString(arrayObj[i]));
或者,您可以使用打印多维数组而不使用循环

System.out.println(Arrays.deepToString(arrayObj));
编辑

您可以使用格式化输出来构建表

public static void printArray(int[][] arrayObj) {
    for (int i = 0; i < arrayObj.length; i++) {
        System.out.printf("%03d: ", i + 1);
        for (int val : arrayObj[i]) {
            System.out.printf("% 4d ", val);
        }
        System.out.println();
    }
}

public static void main(String[] args) {
    int[][] table = { { 3, 1, 2 }, { 5, 1, 4 }, { 100, 200, 300 } };
    printArray(table);
}

二维数组是数组的数组。您创建的数组(
int[2][4]
)如下所示

[ 0 ] -> [ 1, 2, 3, 4 ]
[ 1 ] -> [ 5, 6, 7, 8 ]
因此,当您仅访问第一个维度时,您将获得保存第二个维度的数组

int[][] arr = createArray();
System.out.println(arr[0]);
将输出如下内容

[I@1db9742
要打印数组的值,可以使用
Arrays.toString(arr)
。在这种情况下,您可以省略内部循环,因为
Arrays.toString()
将为您完成此操作

 public void printArray ( int [][] arrayObj ) {
    for (int i = 0; i < arrayObj.length; i++) {
        System.out.println(Arrays.toString(arrayObj[i]));
    }
}
public void打印数组(int[][]arrayObj){
for(int i=0;i
此字符串是冗余的:System.out.print(arrayObj[i]+“”)@nikis我用空字符串在值之间创建了一个空格。@sedeh:这不是散列码:它是内存中存储对象的地址。
deepToString
工作流畅,我注意到了。不过在这个场景中,我喜欢将值打印为网格。不确定如何实现
Arrays.toString(int[])
这里bcos第二个print语句有两个int值。像这样的东西不起作用:
System.out.println(Arrays.toString(arrayObj[i][j])
。进一步思考?@sedeh编写您自己的
toString(int[])
,它使用
StringBuilder
构建
String
,并按您喜欢的格式格式化。此外,您的“双int值”是位于其数组位置
i,j
的单个
int
值。
 public void printArray ( int [][] arrayObj ) {
    for (int i = 0; i < arrayObj.length; i++) {
        System.out.println(Arrays.toString(arrayObj[i]));
    }
}