Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我通过在Java中打印对象获得的信息的含义是什么?_Java_Object_Hash_Tostring - Fatal编程技术网

我通过在Java中打印对象获得的信息的含义是什么?

我通过在Java中打印对象获得的信息的含义是什么?,java,object,hash,tostring,Java,Object,Hash,Tostring,假设我有以下代码: Integer[] a= new Integer[5]; System.Out.println(((Object)a).toString()); 输出是get is [Integer@89fbe3 89fbe3的含义是什么?这是什么地址?散列码?每个对象都是唯一的吗,如果是,如果它是一个多线程程序,它仍然是唯一的吗 谢谢 89fbe3是哈希代码的十六进制版本。[I表示一个整数数组(我很惊讶你用一个整数[],你确定它不是一个整数[]?) 其他一些: [L;:引用类型“ty

假设我有以下代码:

Integer[] a= new Integer[5];
System.Out.println(((Object)a).toString());
输出是get is

[Integer@89fbe3
89fbe3的含义是什么?这是什么地址?散列码?每个对象都是唯一的吗,如果是,如果它是一个多线程程序,它仍然是唯一的吗


谢谢

89fbe3是哈希代码的十六进制版本。
[I
表示一个整数数组(我很惊讶你用一个
整数[]
,你确定它不是一个
整数[]
?)

其他一些:

  • [L;
    :引用类型“typename”的数组(例如
    [Ljava.lang.Integer
  • [J
    :一个长数组
  • [B
    :字节数组

等等。

它是对象的内存地址,这是在对象类中实现的默认toString()所做的。它也是默认hashCode()。

它是对象的标识哈希代码(您可以将其视为对象的地址),以及一些类型信息

[=数组
I=整数

它是
System.identityHashCode(对象x)的结果;

这是每个对象的hashCode()的默认实现

从对象javadoc:

getClass().getName() + '@' + Integer.toHexString(hashCode())

我认为,虽然从技术上讲,所有答案都是正确的,但真正的答案是“否”。这个数字没有任何意义,你完全不能对此做出任何假设。

我本来打算投反对票,但从技术上讲,这并没有错。但这是误导性的。只是因为数组使用默认哈希代码,它才是内存地址。事实并非如此(必须)内存地址。这取决于JVM。(我怀疑它实际上从来不是内存地址。)这就是为什么我说它是默认的toString()和hashCode()在基本对象类型中定义。因为他显然可以重写这些方法中的任何一个以产生不同的结果。@RanZilber:不,对于其类层次结构未在某个地方重写默认的
hashCode()
toString()的任何对象都是如此
method。请看问题中的示例。这是一个奇数。显然,这不是实际的内存地址。那么有什么方法可以在运行时确定两个数组之间的地址吗?该数字是十六进制的哈希代码,对于不覆盖哈希代码的方法,它是唯一的对象ID。这可用于查看两个对象是否为同一实例。@RanZilber我认为您无意中回答了这个问题。这有助于检查您假设引用同一实例的两个变量是否实际引用了该实例。@Steve Kuo'=='可用于查看两个对象是否为同一实例。equals()可以用来查看两个对象根据其创建者是否“相同”。我不知道默认的toString()可以用于什么。这涵盖了所有的基础。
[I
实际上是执行
new int[0]时得到的结果。getClass().getName()
+1.ope!&感谢您的格式修正。)