gpt4 book ai didi

java - IntelliJ IDEA 调试器中变量面板中变量描述的解释是什么?

转载 作者:行者123 更新时间:2023-12-01 12:32:15 27 4
gpt4 key购买 nike

我有一个 Java 应用程序,正在 IntelliJ IDEA 中调试。执行此操作时,我会看到如下所示的“变量” Pane :

举个例子,一行说:

req = {org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestWrapper@22908}"SecurityContextHolderAwareRequestWrapper[ FirewalledRequest[ org.apache.catalina.connector.RequestFacade@422b8dc8]]"

我知道 req 在执行过程中是作用域内的一个变量,但我不知道如何解释这一行的其余部分。我怎么读这个?这是什么语法? reqSecurityContextHolderAwareRequestWrapper 之间的隐含关系是什么? reqFirewalledRequest 之间的隐含关系是什么? reqRequestFacade 之间的隐含关系是什么?方括号是什么意思? @ 符号是什么意思?

最佳答案

调试器中对象的表示由它们的完整类名、@ 前面的十六进制值及其 toString() 方法决定。

例如,如果您查看 SecurityContextHolderAwareRequestWrapper.java ,您可以看到以下内容:

@Override
public String toString() {
return "SecurityContextHolderAwareRequestWrapper[ " + getRequest() + "]";
}

反过来,requesttoString() 方法通过字符串连接调用,这会为您提供您所看到的格式。

方括号格式有些随意,但它通常意味着方括号内的对象由外部对象包含(通过组合引用)。

因此,在这个示例中,您可以看到您有一个 SecurityContextHolderAwareRequestWrapper,其中 has-a FirewalledRequesthas-a RequestFacade

没有覆盖 toString() 方法的类对象看起来像 RequestFacade@422b8dc8 - 通过 java.lang.Object 的默认实现.

十六进制值不是哈希码,因此据我所知它一定是堆内存地址偏移量。这使您可以识别引用同一对象的引用(相同的十六进制值是同一对象)。

关于java - IntelliJ IDEA 调试器中变量面板中变量描述的解释是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25846683/

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