为什么 new 在 Java 中被称为运算符?

Hel*_*rld 2 java new-operator

为什么new关键字在Java中称为运算符?

我知道new在 Java 中为对象动态分配内存并返回对它的引用,但为什么将其称为运算符?

Mar*_*nik 5

官方new不是运营商。Java Language Specification 中没有这个词,它是这件事的唯一权威。

类实例创建表达式,它涉及关键字 new


mer*_*ike 5

实际上,Java 语言规范并没有调用new运算符。它写道

由 ASCII 字符组成的 38 个标记是运算符。

Operator:

    =   >   <   !   ~   ?   :   ->
    ==  >=  <=  !=  &&  ||  ++  --
    +   -   *   /   &   |   ^   %   <<   >>   >>>
    +=  -=  *=  /=  &=  |=  ^=  %=  <<=  >>=  >>>=
Run Code Online (Sandbox Code Playgroud)

new只是一个出现在类实例创建表达式中关键字

我认为这是一个合理的定义,因为运算符将采用操作数(或者,从源代码的角度来看,出现在表达式旁边),但是参数列表后面的类名本身不是有效的表达式,也不会对其进行评估在运行时产生一个值。

我怀疑调用new运算符的做法源自 C++,其中 new 运算符可以独立于构造函数调用而重载,以自定义内存分配策略。Java 或 C# 等托管语言不再允许这样的分离,但运算符这个术语仍然存在。

例如,C# 语言规范实际上讨论了一个new运算符,并指定了它的优先级,但在实际指定其含义时只讨论了可以用 new 关键字形成的 3 种表达式类型(对象创建、数组创建和委托创建表达式) )。