当我在Intellij Idea中调试java应用程序时,我看到堆栈框架中的所有变量都是这样的:
object={java.lang.Object@77}
Run Code Online (Sandbox Code Playgroud)
"@"后面的数字是什么意思?它与hashCode返回的不同.hashCode以十六进制表示形式返回数字2a134eca,等于整数表示中的705908426.数字77和705908426是不同的.
@是应用程序启动后的对象计数.所以@ 1012表示自应用程序启动以来创建的第1012个对象.
它不是身份哈希码.
这里有一些证据:(我说这是因为我实际上并不知道,但我观察到了这一点)
public static void main(String [] args) throws Throwable {
Object object = new Object();
Object object1 = new Object();
Integer foo = new Integer(5);
Object object2 = new Object();
String str = new String("bar");
System.out.println("code :" + System.identityHashCode(object));
RuntimeException exception = new RuntimeException();
exception.printStackTrace(); //put breakpoint here
}
Run Code Online (Sandbox Code Playgroud)
输出:代码:789451787代码:java.lang.Object@2f0e140b
789451787 = 2f0e140b顺便说一下......
IntelliJ调试器的输出:
static = org.boon.core.MyClass
args = {java.lang.String[0]@**97**}
object = {java.lang.Object@**98**}
object1 = {java.lang.Object@**99**}
foo = {java.lang.Integer@**100**}"5"
object2 = {java.lang.Object@**101**}
str = {java.lang.String@**102**}"bar"
exception = {java.lang.RuntimeException@**103**}"java.lang.RuntimeException"
Run Code Online (Sandbox Code Playgroud)
我根据经验知道,但我不知道实际的实现,但我认为它与这样的问题有关:
“@”后面的数字是什么意思?
@ 只是一个分隔符
调试器使用toString对象的方法来显示其值。这里是javadocs中toString方法的默认实现的描述:
Object 类的 toString 方法返回一个字符串,该字符串由对象是其实例的类的名称、at 符号字符“@”和对象哈希码的无符号十六进制表示组成。换句话说,此方法返回一个等于以下值的字符串:
getClass().getName() + '@' + Integer.toHexString(hashCode())
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2138 次 |
| 最近记录: |