What is the meaning of the information that I get

2019-02-27 12:55发布

This question already has an answer here:

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 !

5条回答
Rolldiameter
2楼-- · 2019-02-27 13:04

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楼-- · 2019-02-27 13:05

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.

查看更多
Melony?
4楼-- · 2019-02-27 13:15

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

查看更多
Fickle 薄情
5楼-- · 2019-02-27 13:20

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.

查看更多
迷人小祖宗
6楼-- · 2019-02-27 13:26

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().

查看更多
登录 后发表回答