Вопрос

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?

Это было полезно?

Решение

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).

Другие советы

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.

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.

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top