传递值

2018-01-23

Java是“通过引用传递”还是“按值传递”?

我一直认为Java是通过引用 ; 然而,我看到了一些博客文章(例如,这个博客),声称它不是。我不认为我理解他们的区别。 什么是解释? 我相信在这个问题上的混淆很大程度上与不同的人对“参考”这个词有不同的定义。来自C ++背景的人认为“参考”一定意味着在C ++中意味着什么,来自C背景的人们假定“参考”必须与其语言中的“指针”相同,等等。说Java通过引用传递是否正确取决于“引用”是什么意思。 我试图始终如一地使用评估策略文章中的术语。应该指出的是,尽管文章指出社区的条款差异很大,但它强调语义call-by-value和call-by-reference差异是非常关键的。(我个人更喜欢使用call-by-object-sharing这些日子call-by-value[-of-the-reference],因为这描述了高层次的语义,并没有产生冲突call-by-value,这是潜在的实现。) 你能把你的评论放在一个巨大的广告牌上吗?这就是整个问题。这表明这整个事情是语义。如果我们不同意参考的基本定义,那么我们不会同意这个问题的答案:) 我宁愿问是否在调用时复制传递给方法的值。我想这是你正在寻找的问题。 我认为混淆是“通过引用”与“引用语义”。Java是通过引用语义传递值的。   答案一: Java始终是按值传递的。不幸的是,他们决定把对象的位置称为“参考”。当我们传递一个对象的值时,我们传递给它的引用。这对初学者来说很混乱。 它是这样的:   在这个例子中 aDog.getName()仍然会返回”Max”。值aDog内main未在功能改变foo与Dog “Fifi”作为对象基准由值来传递。如果通过引用传递,那么aDog.getName()在调用之后,in main将返回。”Fifi”foo 同样:...

Read More