Why is new called an operator in Java?

匆匆过客 提交于 2019-12-08 02:48:10

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!