gpt4 book ai didi

java - 编译器是否违反了范围规则?

转载 作者:行者123 更新时间:2023-12-02 01:45:58 24 4
gpt4 key购买 nike

我正在 createString() 函数中创建一个 String 对象并返回对其的引用。当我打印 createString 中创建的对象的 hashCode 和返回到 main 方法的对象的 hashCode 时,引用指向同一个对象。我的问题是 -

在createString()的函数堆栈中创建的对象超出了main方法的范围,那么为什么可以从main方法访问它?

import java.util.*;

public class Temp {

public static void main(String[] args) {
Temp temp = new Temp().createString();


System.out.println(Integer.toHexString(System.identityHashCode(temp)));
}

public final Temp createString() {
Temp strs = new Temp();
System.out.println(" string identity: " + Integer.toHexString(System.identityHashCode(strs)));
return strs;
}
}

最佳答案

简单的答案是,您正在 createString 中创建一个对象(在堆上),并将其返回到 main。因为它位于堆上,并且因为 main 现在有对它的引用,所以它仍然是一个有效的、可行的 String/Object

就范围规则而言,这些规则仅在编译时适用,并且仅适用于变量的用户定义的标签名称,而不适用于它们所定义的数据/内容坚持住。

关于java - 编译器是否违反了范围规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53659519/

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