为什么运行结果输出的是地址值
问题描述:
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))