关于Java中没有运算符重载这一事实的2年左右的讨论(为什么Java不提供运算符重载?),并且从很多C++年代开始到Java,我想知道是否还有更多运算符重载不是Java语言的一部分的根本原因,至少在赋值的情况下,而不是答案底部附近的最高级别答案(即James Gosling的个人选择).
具体来说,考虑分配.
// C++
#include <iostream>
class MyClass
{
public:
int x;
MyClass(const int _x) : x(_x) {}
MyClass & operator=(const MyClass & rhs) {x=rhs.x; return *this;}
};
int main()
{
MyClass myObj1(1), myObj2(2);
MyClass & myRef = myObj1;
myRef = myObj2;
std::cout << "myObj1.x = " << myObj1.x << std::endl;
std::cout << "myObj2.x = " << myObj2.x << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
myObj1.x = 2
myObj2.x = 2
Run Code Online (Sandbox Code Playgroud)
但是,在Java中,该行myRef = myObj2(假设myRef前一行中的声明是 …
可能重复:
运算符重载和覆盖java
我想知道是否可以实现和覆盖+和++运算符.
例:
public class MyClass{
private myIncrement =0; //with its getter and setter
}
.... (another class code)
MyClass myClass = new MyClass();
myClass++;
myClass.getIncrement(); //this will return 1.
Run Code Online (Sandbox Code Playgroud)
而且,如果我想创建一个Integer类,只给出三个中的三个,当我在MultipleOfThree实例上使用i ++时,它将三个加到当前实例而不是sum 1.
我花了几个小时研究这个,我仍然很困惑.
我和许多其他人一样,在Google上搜索了这个并发现了这个SO线程.
然而,最近,我的一个编程课程的学生告诉我这不是真的,事实上,教练验证了它.见鬼,整个班级都听到了,没有人质疑他.他从Java.net提供此链接作为证据.
我立刻对他说,"看起来像JavaScript,"但他指出这一部分:
class User {
List roles;
User() {
roles = new List();
}
operator +(Role newRole) {
this.roles.add(newRole);
}
}
main() {
User alice = new User();
Role adminUser = new Role("TIMESHEET_ADMIN", 3);
alice + adminUser;
print(alice.roles.length);
}
Run Code Online (Sandbox Code Playgroud)
并告诉我它确实是Java.我没有JS的经验无法分辨,他离开了(现在),但我尝试将它放入我的IDE(IntelliJ),并且我被编译器错误攻击了.我甚至不知道从哪里开始修理它们,但主要的是它cannot resolve symbol "operator".
我不是在寻找有关Java内置运算符重载的任何讨论,我正在寻找关于Java中的用户是否可以自己重载运算符的确定答案.
我对 Java 中的运算符重载有疑问。我知道Java不支持运算符重载,但是“+”运算符在下面有效的Java程序中做什么:
import java.util.*;
import java.lang.*;
import java.io.*;
class OperatorOverloadingTest
{
public static void main (String[] args) throws java.lang.Exception
{
String str1 = "Operator ";
String str2 = "overloading";
String str3 = str1+str2;
System.out.println(str3);
}
}
Stdout:
Operator overloading
Run Code Online (Sandbox Code Playgroud) Java禁止运算符重载,但是来自C++我没有看到任何理由.在运算符符号是任何其他符号的语言中,相同的规则适用于"+"和"加号",并且没有问题.那有什么意义呢?
编辑:更具体一点,告诉我哪个缺点超载"+"可能超载"等于".