【问题标题】:Java cannot overload any operators. Why? [duplicate]Java 不能重载任何运算符。为什么? [复制]
【发布时间】:2011-02-07 10:34:23
【问题描述】:

可能重复:
Java operator overload

在 C++ 中,我们可以执行运算符重载。但是Java也是一种面向对象的语言。那么为什么java不支持重载呢?

【问题讨论】:

  • 运算符重载与面向对象范式无关。它是 C++ 语言的糖。
  • MMmmm... 这是非常美味的 C++ 语言糖。我有时会发现自己在 Java 中缺少它。
  • 重载可以说是反面向对象的。

标签: java operator-overloading


【解决方案1】:

http://java.sun.com/docs/white/langenv/Simple.doc2.html

没有提供任何方法 程序员可以重载标准 算术运算符。再一次, 运算符重载的影响可以是 就像通过声明一个很容易实现 类,适当的实例变量, 和适当的操作方法 那些变量。消除运算符 超载导致很大 简化代码。

最后的陈述当然是很主观的。

【讨论】:

【解决方案2】:

实际上,它确实支持运算符重载...具有非常有限的、仅内置的性质。例如,除了通常的算术之外,String 的“+”被重载。

当然,大多数人都想知道为什么 Java 不支持用户定义的运算符重载。 :-) 最简单的答案似乎是,当时 Java 的创建者并没有看到任何干净的方法来将其添加到语言中而不会使 Java 在此过程中变得一团糟(如 C++)。

【讨论】:

  • 难道任何给定的运算符(后缀、前缀或二进制)都不能像函数一样工作,但有特殊的使用方式吗?例如。 a+b 等于 a.add(b)
【解决方案3】:

让java比c++更简单是设计目标

我们想建立一个系统,可以 无需大量编程即可轻松编程 深奥的训练,并利用 今天的标准做法。所以即使 虽然我们发现 C++ 是 不合适,我们将 Java 设计为 尽可能接近 C++,以便 使系统更易于理解。 Java 省略了很多很少使用的,很差的 理解的,令人困惑的 C++ 特性 根据我们的经验,带来更多 悲大于利。

从这里: The Java Language: An Overview

【讨论】:

    【解决方案4】:

    在 C++ 中使用运算符重载时,代码更难理解。可能这就是 Java 开发人员决定不实现它的原因。 确实,包含大量重载运算符的代码可能非常容易产生误导且难以阅读,就像包含大量宏的代码一样。

    【讨论】:

      【解决方案5】:

      请注意,“加号”运算符为java.lang.String 重载存在异常情况。

      【讨论】:

      • 已重载,未覆盖。 + 也为double+double 等重载
      • Doh。更正了。超载。谢谢。
      【解决方案6】:

      很久以前,新闻是 Java 团队研究了其他语言(主要是 C++),并试图对 Java 中包含(或排除)哪些语言级别的特性做出判断。

      运算符重载是 C++ 中的一项重要新功能,许多初出茅庐的程序员使用它以有趣的方式解决问题。不幸的是,这些方法中的大多数都是错误的,很少有程序员以“程序员可移植”的方式重载运算符。结果,阅读程序经常会错过“+”运算符(或其他东西)中引入的“魔术”代码。除了数字(向量等)之外,您对“+”的含义也存在分歧。

      所以封面故事(不知道是不是真的)是 Java 团队看到你可以只命名方法 sum.plus(...) 很明显,调用是对用户编写的代码(其中可能被重载)而保留的操作“+”等只会做语言定义的事情。这会增加某些类型的代码可读性,但会增加一些额外的单词。

      这是真的,还是试图用合理化来填补历史?我不知道。也许语言实现者只是忙于让 Java 工作,并没有在发布日期之前解决运算符重载问题。无论哪种方式,它都在 95% 的情况下极大地提高了 Java 的可读性,但代价是向量数学有点冗长。

      【讨论】:

        猜你喜欢
        • 2018-03-16
        • 2015-11-13
        • 2011-05-09
        • 2013-07-30
        • 1970-01-01
        • 2020-03-25
        • 1970-01-01
        • 1970-01-01
        • 2011-07-09
        相关资源
        最近更新 更多