问题
Why is new
keyword called an operator in Java?
I know that new
dynamically allocates memory in Java for an object and returns a reference to it but why is it called an operator?
回答1:
Actually, the Java Language Specification does not call new
an operator. It writes:
38 tokens, formed from ASCII characters, are the operators.
Operator: = > < ! ~ ? : -> == >= <= != && || ++ -- + - * / & | ^ % << >> >>> += -= *= /= &= |= ^= %= <<= >>= >>>=
new
is simply a keyword that occurs in a class instance creation expression.
I consider this a reasonable definition, as an operator would take operands (or, from the perspective of source code, appear next to an expression), but the class name followed by the argument list is not by itself a valid expression nor it is evaluated to produce a value at runtime.
I suspect the practice of calling new
an operator originates from C++, where the new operator could be overloaded independent of the constructor call, to customize the memory allocation strategy. Managed languages such as Java or C# no longer allow such a separation, but the term operator has stuck.
For instance, the C# language specification actually talks about a new
operator, and specifies its precedence, but when actually specifying its meaning only talks about the 3 expression types than can be formed with a new keyword (object creation, array creation, and delegate creation expressions).
回答2:
Officially new
is not an operator. There is no such word in the Java Language Specification, which is the sole authority in this matter.
There is the class instance creation expression, which involves the keyword new
.
回答3:
new
is indeed an operator. It is a reserved keyword in Java, so you can't override it like you can override methods. It operates on class names - for a given class name it returns a new instance of the class. It's like the unary -
(minus) operator which takes an integer and returns another integer (one with opposite sign), only that for new, the input and output are of different kinds.
回答4:
It's an operator, isn't it?
You could create instances like this:
A some = A.new(); // This wouldn't be an operator but just a built-in method
Or instead of new
it could be +
A some = +A();
But in Java and other popular languages, they decided to implement an operator to create instances of classes and this was the so-called new
operator.
来源:https://stackoverflow.com/questions/22898748/why-is-new-called-an-operator-in-java