gpt4 book ai didi

java - 打印数组 : memory address or its content?

转载 作者:行者123 更新时间:2023-11-29 09:55:49 25 4
gpt4 key购买 nike

你能解释一下为什么这段代码

int[] test={0,0,0,0,0};
System.out.println(test);

打印类似 [I@42e816(可能是内存地址)但这段代码

 Stack<Integer> stack = new Stack<Integer>();
stack.push(1);
stack.push(3);
stack.push(5);
stack.push(2);
stack.push(4);
System.out.println(stack);

打印“[1, 3, 5, 2, 4]”?有什么不同?

如果 Stacks 派生自 Vectors 而 Vectors 派生自数组,那么造成这种不同行为的原因是什么?

最佳答案

集合有一个定义良好的 toString() 方法,但是恕我直言,数组被遗忘了,而是使用默认的 Object.toString() 以及来自 Object 的许多其他默认方法,这些方法也不是很有用。您需要调用后来添加的许多辅助类之一,以使数组更有用。

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

十六进制是对象的默认 hashCode() 而不是地址。它可能不是唯一的,即使数组在内存中移动,这个数字也不会改变。

数组的辅助类

java.lang.reflect.Array
java.util.Arrays
java.lang.System.arraycopy(); // one method

额外的

org.apache.commons.lang.ArrayUtils
org.uispec4j.utils.ArrayUtil
toxi.util.datatypes.ArrayUtil
net.sf.javaml.utils.ArrayUtils
com.liferay.portal.kernel.util.ArrayUtil

还有更多。

并不是说数组不应该有自己的方法,而是有太多的方法可供选择。 ;)

关于java - 打印数组 : memory address or its content?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12182946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com