为什么 C++ 支持运算符重载而 Java 不支持? 与 C++ 不同,Java 不支持运算符重载。Java 不能为程序员提供自由的标准算术运算符重载,例如+, - ,*和/等。如果你以前用过 C++,那么 Java 与 C++ 相比少了很多功能,例如 Java 不支持多重继承,Java中没有指针,Java中没有引用传递。另一个类似的问题是关于 Java 通过引用传递,这主要表现为 Java 是通过值还是引用传参
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率

为什么Java不支持运算符重载?
收起
- 写回答
- 好问题 0 提建议
- 关注问题
微信扫一扫
点击复制链接分享
- 邀请回答
- 编辑 收藏 删除
- 收藏 举报
3条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
pzzhao 2023-03-09 06:40关注你这个问题,和一个面试题文章里面的一样,后面还有一些
简单性和清晰性。清晰性是Java设计者的目标之一。设计者不是只想复制语言,而是希望拥有一种清晰,真正面向对象的语言。添加运算符重载比没有它肯定会使设计更复杂,并且它可能导致更复杂的编译器, 或减慢 JVM,因为它需要做额外的工作来识别运算符的实际含义,并减少优化的机会, 以保证 Java 中运算符的行为。
避免编程错误。Java 不允许用户定义的运算符重载,因为如果允许程序员进行运算符重载,将为同一运算符赋予多种含义,这将使任何开发人员的学习曲线变得陡峭,事情变得更加混乱。据观察,当语言支持运算符重载时,编程错误会增加,从而增加了开发和交付时间。由于 Java 和 JVM 已经承担了大多数开发人员的责任,如在通过提供垃圾收集器进行内存管理时,因为这个功能增加污染代码的机会, 成为编程错误之源, 因此没有多大意义。
JVM复杂性。从JVM的角度来看,支持运算符重载使问题变得更加困难。通过更直观,更干净的方式使用方法重载也能实现同样的事情,因此不支持 Java 中的运算符重载是有意义的。与相对简单的 JVM 相比,复杂的 JVM 可能导致 JVM 更慢,并为保证在 Java 中运算符行为的确定性从而减少了优化代码的机会。
让开发工具处理更容易。这是在 Java 中不支持运算符重载的另一个好处。省略运算符重载使语言更容易处理,这反过来又更容易开发处理语言的工具,例如 IDE 或重构工具。Java 中的重构工具远胜于 C++。
另外最近恰好看到阿里技术号的一篇文章,里面提到了Manifold ,它可以在java中实现操作符重载,有兴趣可以试试。
原文链接 https://mp.weixin.qq.com/s/pr_zylljvVaW7taeovtOxw本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏举报 编辑记录微信扫一扫
点击复制链接分享
编辑预览轻敲空格完成输入- 显示为
- 卡片
- 标题
- 链接
评论按下Enter换行,Ctrl+Enter发表内容

- 显示为
- 卡片
- 标题
- 链接
报告相同问题?
- 2022-01-20 03:53回答 4 已采纳 System.out.println( 1 > 5 ? "a": "b");
- 2021-06-12 14:55回答 2 已采纳 多态一般只用于对象,函数和运算符只能称为重写或者重载。
- 2022-03-30 08:16回答 3 已采纳 这看你是返回*this,还是重新定义一个新对象,return新对象
- 2024-06-20 10:30墨瑾轩的博客 虽然Java不直接支持运算符重载,但通过方法重载、包装类和精心设计的API,我们仍然能够实现类似的效果,保持代码的清晰与高效。理解这些替代方案,对于深入Java编程实践至关重要,有助于开发者在面对特定需求时做出...
- 2020-05-09 03:13回答 1 已采纳 # 问题解决的话,请点采纳 ``` Person& operator++(int) { Person& P1 = *this; m_A++;
- 2022-07-04 01:18回答 5 已采纳 用错了哈 max = arr[i] > max ?arr[i] : max;
- 2022-11-02 12:06回答 2 已采纳 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7600182
- 2019-08-13 03:45做人,最重要的就是开心嘛!的博客 Java不能为程序员提供自由的标准算术运算符重载,例如+,-,*和/等。如果你以前用过C++,那么Java与C++相比少了很多功能,例如Java不支持多重继承,Java中没有指针,Java中没有引用传递。虽然...
- 2022-11-01 15:48回答 2 已采纳 endl是换行啊,跟着cout输出才可以,你写的那个是跟在函数后面,不符合语法要求
- 2015-10-18 17:58回答 2 已采纳 No, operator overloading is not a feature of Go. Quoting from the official FAQ to explain why:
- 2022-05-02 08:23回答 1 已采纳 重载函数需要返回True和False,而不是实际数值,否则if条件一直为True只会执行m1.message(),修改如下: int operator<(Mobile &x1, Mobile &
- 2021-03-22 06:38BOBO爱吃菠萝的博客 Java不支持运算符重载 = 小白也能学编程Java之所以不支持运算符重载,并不是如下原因:会使JVM变得复杂、性能下降:君不见C++内置运算符重载的能力?C++的性能在任何时代秒杀Java相信没有争议。便于静态分析、工具化...
- 2023-05-24 06:14Java烂猪皮V的博客 通过更直观,更干净的方式使用方法重载也能实现同样的事情,因此不支持 Java 中的运算符重载是有意义的。清晰性是Java设计者的目标之一。添加运算符重载比没有它肯定会使设计更复杂,并且它可能导致更复杂的编译器, ...
- 2020-12-02 17:33weixin_39632728的博客 Java不支持运算符重载 = 小白也能学编程Java之所以不支持运算符重载,并不是如下原因:会使JVM变得复杂、性能下降:君不见C++内置运算符重载的能力?C++的性能在任何时代秒杀Java相信没有争议。便于静态分析、工具化...
- 2020-04-27 03:01程序猿DD_的博客 点击上方蓝色“程序猿DD”,选择“设为星标”回复“资源”获取独家整理的学习资料!作者 |Yujiaao来源 |https://segmentfault.com/a/119000001...
- 没有解决我的问题, 去提问
问题事件
- 京ICP备19004658号
- 经营性网站备案信息
公安备案号11010502030143
- 营业执照
- 北京互联网违法和不良信息举报中心
- 家长监护
- 中国互联网举报中心
- 网络110报警服务
- Chrome商店下载
- 账号管理规范
- 版权与免责声明
- 版权申诉
- 出版物许可证
- ©1999-2025北京创新乐知网络技术有限公司