我使用Java编程并且一直试图准确理解运算符重载是什么。我还是有点疑惑。
操作员可以根据哪个班级使用它来承担不同的含义?我读过它是“Name Polymorphism”。
Java显然不支持它,并且围绕这一点似乎存在很多争议。我应该担心吗?
作为最后一个问题,教师在作业中声明作业使用运算符重载,他主要是C ++程序员,但我们可以用Java编写作业。由于Java不支持重载,有什么我应该警惕的吗?
答案 0 :(得分:9)
运算符重载基本上意味着对不同的数据类型使用相同的运算符。并因此而获得不同但相似的行为。
Java确实不支持这种情况,但任何类似这样的情况都可能有用,你可以在Java中轻松解决它。
Java中唯一重载的运算符是算术+
运算符。与数字(int
,long
,double
等)一起使用时,它会添加它们,就像您期望的那样。与String
个对象一起使用时,它会将它们连接起来。例如:
String a = "This is ";
String b = " a String";
String c = a + b;
System.out.print (c);
这将在屏幕上打印以下内容:This is a String
。
这是Java中唯一可以讨论运算符重载的情况。
关于你的任务:如果要求是做一些涉及运算符重载的事情,你就不能用Java做到这一点。向您的老师询问您可以使用哪种语言进行此特定作业。您很可能需要在C ++中完成它。
PS:如果是Integer
,Long
,Double
等对象,它也会因拆箱而起作用。
答案 1 :(得分:3)
Java不允许重载运算符。它使用非常有限的运算符重载,因为+
根据上下文进行添加或连接。
如果你的作业要求你通过重载操作符来实现某些东西,那么你将无法用Java实现它。也许你应该问老师为什么他允许Java进行这样的任务。
如果您的作业仅要求您使用重载运算符,那么让您的程序使用+
进行连接和添加将符合该法案。但我会问老师,因为我怀疑这是他的期望。
答案 2 :(得分:1)
Java显然不支持它,似乎有很多 关于这一点的争议。
对此有 no 争议。有些人可能会不同意这个决定,但是James Gosling和其他人从第一天开始就决定让运营商超出类开发人员的语言。它不太可能改变。
正如其他人所指出的那样,他们保留了JVM在有限的基础上超载运营商的权利。关键是你在开发自己的课程时不能这样做。
他们之所以这样做是因为有些C ++开发人员滥用这种功能的例子(例如重载了点运算符。)
我应该担心吗?
没有。 Java不会爆炸。你将无法为你的课程做到这一点。如果你觉得你需要,你只需要编写C ++或其他语言。
答案 3 :(得分:0)
可以使用自然a!= b(a不等于b)或a.Equals(b)
b.set(1, 0);
a = b;
b.set(2, 0);
assert( !a.Equals(b) );
相比,java有一组有限的运算符重载
答案 4 :(得分:0)
关于运算符重载和多态之间差异的查询。多态性是一种标准的OOP概念,其中一个类的实例可能根据底层类型展现出不同的特征。例如在C ++中:
class Shape {
...
virtual void draw()=0;
}
class Circle :public Shape {
virtual void draw() {...draw a circle...}
}
class Square:public Shape {
virtual void draw() {...draw a square...}
}
..
Shape *s = new Circle();
s->draw(); // calls Circle::draw();
s=new Square(); // calls Square::draw();
因此s表现出多态性。
这与运算符重载不同,但您已经解释了其他答案中的内容。