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

2017-08-16 18:14:11 +08:00
 masteryi
3004 次点击
所在节点    问与答
8 条回复
Jiavwen
2017-08-16 20:03:10 +08:00
你指的是一个方法里面创建一个局部变量,然后返回给调用这个方法的上一级使用?

这个当然是可以的,相当于你这个在堆里面创建的局部变量被另外一个对象引用了。
ihuotui
2017-08-16 20:54:19 +08:00
因为这个对象 jvm 已经判断为溢出(就是被本函数外引用)所以对象创建在堆里。
wwqgtxx
2017-08-16 21:15:23 +08:00
因为只要不是基本类型都是在堆中创建的,并不在栈中,就算退出了函数这个对象还在堆中呀
suikator
2017-08-16 22:00:42 +08:00
这关 java 什么事 就算是 c++不也能返回 new class 的引用吗?
masteryi
2017-08-16 22:14:18 +08:00
@suikator c++里离开了函数局部变量就被销毁了啊,返回的引用指向了无效的内存
jeffw
2017-08-16 22:45:09 +08:00
@masteryi new class 是在堆上分配的哦
sagaxu
2017-08-16 23:01:38 +08:00
@masteryi 只要语言愿意,返回的时候给你复制一份出来也行。事实上 Java 对象在内存中被自动的挪来挪去也很平常,对象创建在堆里还是栈里,完全由系统决定。初学多个语言疑惑必然很多,熟悉五门以上语言时,就豁然开朗了。
nevin47
2017-08-16 23:15:04 +08:00
@masteryi LZ 的回复说明还需要在重温下 CPP 的基础啊,哈哈

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/383455

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX