What is the meaning of the information that I get

2019-02-27 13:00发布

问题:

This question already has an answer here:

  • How do I print my Java object without getting “SomeType@2f92e0f4”? 10 answers

Lets say i have this code :

Integer[] a= new Integer[5];
System.Out.println(((Object)a).toString());

the output is get is

[Integer@89fbe3

what is the meaning of 89fbe3 ? is this some kind of address ? hash code? is it unique for each object? , and if so- if its a multi-threaded program , is it still unique ?

thanks !

回答1:

It's the memory address of the object which is what the default toString() implemented in the Object class does. It is also the default hashCode().



回答2:

It's the result of System.identityHashCode(Object x);

which is the default implementation of every object's hashCode()...

from the Object javadoc:

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


回答3:

The 89fbe3 is a hex version of the hash code. The [I means an array of ints (I'm surprised you get that with an Integer[], are you sure it wasn't an int[]?)

Some others:

  • [L<typename>;: an array of reference type "typename" (e.g. [Ljava.lang.Integer)
  • [J: an array of longs
  • [B: an array of bytes

etc.



回答4:

It is the identity hash code of the object (you can think of it as the address of the object), along with some type information.

[ = array I = Integer



回答5:

I think that while technically all the answers are correct, the real answer is "NO". This number has no meaning and you can make absolutely no assumptions about it.