天天看点

java重载运算符_Java为什么不支持运算符重载?

java重载运算符_Java为什么不支持运算符重载?

做了这么多年的 JAVA 开发你是否想过这样一个问题?我们知道在 C++中是支持运算符重载的,为什么在 JAVA 中不支持呢?或许有的人会说在 JAVA 字符串的连接不就是使用了"+"运算符的重载吗?你信吗,反正我是不信的,我们接着往下看。

首先明确一点,在 JAVA 中是不支持运算符重载的,这点和 C++不同。JAVA 中的标准算术运算符是不会自由地提供给开发人员的,比如+、-、*和/等等。如果你对 C++和 JAVA 都有了解,你就知道 JAVA 相比于 C++少了很多功能,比如说 JAVA 不支持多继承,JAVA 中没有指针的概念,JAVA 没有地址引用传递,都是值传递。

关于 JAVA 中值传递的问题,大家可以看看我的另外2片问题:

JVM性能调优:基本概念介绍

Java对象头信息分析以及对三种锁的性能对比

JVM性能调优:Java垃圾回收都有哪些算法?

相信你看了以上3篇文章后你会从中得到答案。

对于 JAVA 中为什么不支持运算符重载,我不知道背后的根本原因,但是以下的一些说法还是很有道理可以说明 JAVA 为什么不支持运算符重载。如果你有更好的理由或者不同的观点,欢迎在评论区留言交流!

简单性和清晰性

JAVA 语言的设计者从一开始就不是只是想复制一门编程语言,而是希望开发出一种很清晰并且真正面向对象的开发语言,所以清晰性是 JAVA 设计者的目标之一。

当添加了运算符重载肯定比没有更加复杂,这也就必然导致编译器更加复杂或者还会降低 JVM 的运算效率,理由很简单,添加后肯定需要有额外的工作来识别运算符的实际含义,并且减少了优化的机会,以保证 JAVA 中运算符的行为。

避免编程错误

你可以想一想如果 JAVA 允许开发人员定义的运算符重载,那么同一种运算符在 JVM 中肯覅那个就被赋予了多种含义,这必然导致开发人员的学习曲线变得陡峭,门槛变得更高,事情变得更加混乱。

根据实际编程经验,如果开发语言支持运算符重载的时候编程的错误率会增加,从而增加了开发和项目交付的时间。JAVA 开发中 JAVA 和 JVM 已经为开发人员承担了很多的责任,比如提供垃圾收集器进行内存管理时,会因为这样的功能增加污染代码的机会,成为编程错误的根本,所以加入该功能是没有多大意义的。

JVM复杂性

站在 JVM 的角度来看,增加对运算符的重载必然会使问题变得更加困难。JAVA 很聪明,它提供了方法重载,通过使用方法重载可以实现同样的功能,所以 JAVA 不支持运算符重载还是很有意义的。

与相对简单的 JVM 相比,复杂的 JVM 可能导致 JVM 更慢,并为保证在 Java 中运算符行为的确定性从而减少了优化代码的机会。

让开发工具处理更容易

这也是在 JAVA 为什么不支持运算符重载的另外一个好处。省略运算符重载后使语言更容易处理和理解,比如说静态分析等等。

更加简单的 JAVA 语言也更加容易开发出处理语言的工具,比如像 IDEA 或者重构工具。JAVA 中的重构工具毫无疑问是远远胜于 C++的。

面试题:请说说GET和POST请求有什么区别?