gpt4 book ai didi

java - 如果Java仅是按值传递,我可以在形式参数中强制使用final修饰符吗?

转载 作者:行者123 更新时间:2023-12-02 11:17:31 25 4
gpt4 key购买 nike

如果Java对非原语严格按值传递,那么建立编码标准(例如将方法和构造函数的所有形式参数都定为最终形式)不是更好吗? - 避免混淆?

最佳答案

If Java is strictly pass-by-value for non primitive

Java 对所有参数和所有结果都严格按值传递,无论类型如何

如果您不明白,或者不相信我,请阅读 Java is Pass-by-Value, Dammit!

... can I mandate a final modifier in formal parameters?

是的,您可以,但由于您给出的原因,这样做是一个坏主意。

将方法或构造函数的形式参数声明为final意味着与您试图赋予它的含义不同的东西。具体来说,这意味着参数不能被分配到方法/构造函数的主体中。

这样做会产生以下后果:

  • 它实际上会改变代码的含义,在某些情况下可能会导致编译错误。 (这些都是很好的编译错误......因为它们迫使程序员停止做一些通常会使他的代码不太清晰的事情。但是修复需要付出努力并且需要重新测试等)

  • 经验丰富的 Java 程序员不会理解您想要的含义。 (并不是说他们应该需要被提醒......)。

  • 新手 Java 程序员可能会更加困惑......尤其是如果他们认为将某些内容声明为 final 会改变参数传递的不正确概念语义!

所以这并没有达到你的目的。

真正的解决方案是教育人们Java 始终使用按值传递。 (这包括殴打那些坚持传播虚假信息并对此表示怀疑的人......就像你的问题一样!)

<小时/>

(几乎在所有情况下,最好不要更新形式参数,并且将它们声明为 final 可以防止您意外地执行此操作。所以这是一个很好的实践。但它是一个好的实践的原因不是你所说的......如果你确实按照你给出的推理将其纳入编码标准,你将应该受到严厉批评。)

如果您不明白,或者不相信我,请阅读 Java is Pass-by-Value, Dammit!

关于java - 如果Java仅是按值传递,我可以在形式参数中强制使用final修饰符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7508476/

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