我使用Java编程,一直试图理解什么是运算符重载。但仍有些困惑。
一个运算符的含义会因为使用它的类不同而有所不同?我读到过这被称为 "名称多态性"。
显然,Java不支持它,并且似乎存在很多争议。我应该担心吗?
最后一个问题是,老师在作业中说明了作业使用了运算符重载,他主要是C++程序员,但我们可以使用Java编写作业。由于Java不支持重载,我应该注意什么吗?
我使用Java编程,一直试图理解什么是运算符重载。但仍有些困惑。
一个运算符的含义会因为使用它的类不同而有所不同?我读到过这被称为 "名称多态性"。
显然,Java不支持它,并且似乎存在很多争议。我应该担心吗?
最后一个问题是,老师在作业中说明了作业使用了运算符重载,他主要是C++程序员,但我们可以使用Java编写作业。由于Java不支持重载,我应该注意什么吗?
运算符重载基本上是指在不同的数据类型中使用相同的运算符。因此,由于这个原因,会得到不同但相似的行为。
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
。Integer
、Long
、Double
等对象,由于拆箱的原因,它也会起作用。+
根据上下文执行加法或连接操作。+
进行连接和加法运算即可。但我建议您询问老师,因为我怀疑这是否符合他的期望。不需要。Java 不会爆炸。你只是不能为你的类做到这一点。如果你觉得需要,你只需编写 C++ 或其他语言即可。我应该担心这个问题吗?
可以使用自然语言 a != b(a 不等于 b)或者 a.Equals(b)
b.set(1, 0);
a = b;
b.set(2, 0);
assert( !a.Equals(b) );
但是相比其他语言,Java的运算符重载功能受到了一定的限制 http://en.wikipedia.org/wiki/Operator_overloading
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();