masteryi
V2EX  ›  问与答

为什么 Java 能返回局部变量的引用?

  •  
  •   masteryi · Aug 16, 2017 · 3485 views
    This topic created in 3222 days ago, the information mentioned may be changed or developed.
    8 replies    2017-08-16 23:15:04 +08:00
    Jiavwen
        1
    Jiavwen  
       Aug 16, 2017
    你指的是一个方法里面创建一个局部变量,然后返回给调用这个方法的上一级使用?

    这个当然是可以的,相当于你这个在堆里面创建的局部变量被另外一个对象引用了。
    ihuotui
        2
    ihuotui  
       Aug 16, 2017 via iPhone
    因为这个对象 jvm 已经判断为溢出(就是被本函数外引用)所以对象创建在堆里。
    wwqgtxx
        3
    wwqgtxx  
       Aug 16, 2017 via iPhone
    因为只要不是基本类型都是在堆中创建的,并不在栈中,就算退出了函数这个对象还在堆中呀
    suikator
        4
    suikator  
       Aug 16, 2017
    这关 java 什么事 就算是 c++不也能返回 new class 的引用吗?
    masteryi
        5
    masteryi  
    OP
       Aug 16, 2017
    @suikator c++里离开了函数局部变量就被销毁了啊,返回的引用指向了无效的内存
    jeffw
        6
    jeffw  
       Aug 16, 2017
    @masteryi new class 是在堆上分配的哦
    sagaxu
        7
    sagaxu  
       Aug 16, 2017 via Android
    @masteryi 只要语言愿意,返回的时候给你复制一份出来也行。事实上 Java 对象在内存中被自动的挪来挪去也很平常,对象创建在堆里还是栈里,完全由系统决定。初学多个语言疑惑必然很多,熟悉五门以上语言时,就豁然开朗了。
    nevin47
        8
    nevin47  
       Aug 16, 2017 via Android
    @masteryi LZ 的回复说明还需要在重温下 CPP 的基础啊,哈哈
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3020 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 71ms · UTC 09:17 · PVG 17:17 · LAX 02:17 · JFK 05:17
    ♥ Do have faith in what you're doing.