为什么运行结果输出的是地址值

为什么运行结果输出的是地址值

问题描述:

package com.company;

public class Main {

public static void main(String[] args) {

    int[] arr = {34, 98, 25, 46, 29, 16};

    reverse(arr);
    System.out.println(arr);
}

public static void reverse(int[] arr) {

    for (int i = 0; i < arr.length / 2; i++) {

        int temp = arr[i];
        arr[i] = arr[arr.length - 1 - i];
        arr[arr.length - 1-i] = temp;
    }
}

}


你这样输出肯定是数组的存储地址啊,要打印数组可以用

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

或者

for(int a:arr){
    System.out.println(a);
}

因为你打印的就是数组变量本身,它本质就是一个地址。
应该这样:

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

}

打印的是数组的引用名,名字在栈中是指向堆的地址

数组是存放在堆内存里的一块连续的区域。而arr是数组的引用,存在栈里,准确来说arr指向的是数组首元素的地址(34的地址)。后面的元素的查找是根据首元素(34)的位置来寻找(因为是连续的嘛)。所以单纯打印arr一定是arr的地址(也是首元素的地址)。想要数组里的元素可以借用Arrays工具类来实现。代码:System.out.println(Arrays.toString(arr))