Sha*_*wat 5 java evaluation-strategy
如果使用函数调用函数Call-by-Reference,则对函数内部变量所做的任何更改都会立即影响调用者.因为Call-by-Sharing,它在功能结束时受到影响.
问题1: Java是否使用Call-by-Sharing而不是Call-by-Reference?
问题2:我认为,Call-by-Sharing不同于Call-by-Reference 只,而多线程.它的创建只是为了减少在某些其他线程中使用时值的并发重写; 提供一致性.我对吗?
我建议您不要使用"共享呼叫"术语.正如本维基百科文章所述:
"然而,术语"通过共享调用"并不常用;术语在不同来源之间是不一致的.例如,在Java社区中,他们说Java是按值传递的,而在Ruby社区中,他们是尽管这两种语言表现出相同的语义,但是说Ruby是传递引用[引证需要].分享共享意味着语言中的值基于对象而不是基本类型."
和
"虽然这个术语在Python社区中有广泛的用法,但其他语言(如Java和Visual Basic)中的相同语义通常被描述为按值调用,其中值隐含为对象的引用."
底线是Java使用"通过共享调用"......但他们并没有这样称呼它,如果你想让Java人员了解你,你也许不应该这样做.
我认为Call-by-Sharing仅在多线程时与Call-by-Reference不同.它的创建只是为了减少在某些其他线程中使用时值的并发重写; 提供一致性.我对吗?
不,你不对.
"共享调用"实际上意味着在值是对象引用的情况下"按值调用".真正的"引用调用"意味着您(实际上)传递变量的地址,并且被调用的方法可以更新变量.