gpt4 book ai didi

java - 是否存在技术原因导致 Java 中的 Final 不像 C++ 中的 const 那样严格?

转载 作者:行者123 更新时间:2023-12-02 08:40:29 26 4
gpt4 key购买 nike

在 C++ 中,可以使用 const 关键字来指示指向数据的指针或数据本身是否为常量(或两者),即

const SomeClass* p;//数据是常量

SomeClass* const p;//指针是常量

const SomeClass* const p;//两者都是常量

在 Java 中,final 关键字的限制要大得多:

final SomeClass o;//引用是常量,对象可以改变

我一直想知道为什么Java在这方面比C++更受限制。这是语言设计者做出的决定(也可能是其他决定),还是有技术原因阻止它?

Java 对象由垃圾收集器管理的事实对此有影响吗?

最佳答案

第一个原因是 Java Final 的用途与 C++ const 的用途不同。对于它所服务的目的来说,这很好,即作为面向对象类的层次结构的语义限制,以促进此类层次结构的正确设计。这与无法更改类的值/状态没有任何关系。

第二个原因是没有什么可以阻止 Java 拥有某种“const”特性。但它最初是针对非常有限的用例(与当前的各种用例相比有限)而设计的,即以简单的方式在资源有限的微型设备上进行嵌入式计算。考虑到该用例,主要的初始目标之一是编程代码的简单性、虚拟机编程的简单性、编译器编程的简单性等等。而“const”式的复杂性是他们当时不需要的。

从那时起,Java 已经发展了很多,但在向后兼容性和语言教学的简易性方面受到了很大的限制,因此语言(及其运行的 VM 及其框架)的发展是相当谨慎的。 。 (因此,慢慢地。)

并且有一种感觉(合理的),通过声明“const”风格可以获得的很多东西可以通过该语言中的其他面向对象功能获得,例如,字段有 getter,但没有 setter。

因此,语言/VM/框架中没有理由不存在“常量”,除了它还没有被认为与其他需要解决的问题一样重要,并且语言中存在解决方法。

但是人们在 Java 中添加了“const”性质——只是在语言标准之外。查找用于创建“不可变对象(immutable对象)”的各种库和工具,看看可以做什么。

(回答你的最后一个问题:它与 GC 无关。)

关于java - 是否存在技术原因导致 Java 中的 Final 不像 C++ 中的 const 那样严格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60103961/

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