这是为什么打印数组的内存地址

这是为什么打印数组的内存地址

本文介绍了这是为什么打印数组的内存地址的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以这第一个code返回整数数组的内存地址,但我想它打印出实际的数组。

So this first code returns the memory address of the integer array, but I want it to print out the actual array.

import java.util.Arrays;
public class FinalsReview{
int[] list = new int[]{12, 435,546, 7, 24, 4, 6, 45, 21, 1};
public static void main(String[]args){
    FinalsReview hello = new FinalsReview();
    System.out.print(hello.create());
}
public int[] create(){
    Arrays.toString(list);
    return list;
    }
}

但是,下面的code打印实际的数组。

However, the following code prints the actual array.

import java.util.Arrays;
public class FinalsReview{
int[] list = new int[]{12, 435,546, 7, 24, 4, 6, 45, 21, 1};
public static void main(String[]args){
    FinalsReview hello = new FinalsReview();
    hello.create();
}
public void create(){
    System.out.println(Arrays.toString(list));
    }
}

为什么第一个返回的内存地址?

Why does the first one return the memory address?

推荐答案

这是不是内存地址,它是散code()和类名是如何的toString()中的,当你不指定的toString()为<$方法C $ C> INT [] 类,你继承它对象

it is not memory address, it is the hashCode() and classname that is how toString() is defined in Object, when you don't specify toString() method for int[] class you inherit it from Object

那就是像

public String toString() {
 return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

而这个 Arrays.toString(名单)是在收藏迭代明确,每个元素的印花值

while this Arrays.toString(list) is explicitly iterates over the Collection and printing value of each element

为什么从http://bugs.java.com/view_bug.do的

and why that from http://bugs.java.com/view_bug.do?bug_id=4168079

警告:在toString()方法常用于印刷诊断中使用。
  人们必须要小心,如果非常大的阵列参与。该
  与此Lisp编程语言的交易使用印刷级/打印长度的机制。
  这一点在Java需要类似的东西为好。在实践中,
  在每类中提供'的toString'方法应该是pferred为$ P $
  简短的选项适用于简洁的诊断使用,更详细的
  再通过附加的应用程序特定的转换方法提供了presentation
  如果需要,应用程序逻辑。

不管它的技术优点,然而,值得怀疑的是我们可以做
  在由于兼容性/稳定性的担忧这么晚的日期这样的改变。

Regardless of its technical merit, however, it is doubtful that we can make such a change at this late date due to compatibility/stability concerns.

william.maddox@Eng 1998年8月31日

william.maddox@Eng 1998-08-31

我同意。它肯定会一直是正确的事情在1.0,或者
  甚至1.1,但它几乎肯定来不及了所有这些变化
  也许除了的toString变化。一个安慰的是,这是令人惊讶的简单

I concur. It would definitely have been the right thing in 1.0, or maybe even 1.1, but it's almost certainly too late for all of these changes except perhaps the toString change. One consolation is that it's amazingly easy

这篇关于这是为什么打印数组的内存地址的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-26 07:47