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

时间:2014-04-06 19:19:11

标签: java new-operator

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

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

4 个答案:

答案 0 :(得分:4)

正式new 不是运营商。 Java语言规范中没有这样的词,它是这个问题的唯一权威。

class instance creation expression,其中涉及关键字 new

答案 1 :(得分:3)

实际上,Java语言规范并未将new称为运算符。它writes

  

由ASCII字符组成的38个令牌是运营商。

Operator:

    =   >   <   !   ~   ?   :   ->
    ==  >=  <=  !=  &&  ||  ++  --
    +   -   *   /   &   |   ^   %   <<   >>   >>>
    +=  -=  *=  /=  &=  |=  ^=  %=  <<=  >>=  >>>=

new只是keyword中出现的class instance creation expression

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

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

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

答案 2 :(得分:2)

这是一个运营商,不是吗?

你可以创建这样的实例:

A some = A.new(); // This wouldn't be an operator but just a built-in method

或者代替new它可能是+

A some = +A();

但是在Java和其他流行语言中,他们决定实现一个运算符来创建类的实例,这就是所谓的new 运算符

答案 3 :(得分:2)

new确实是一名运营商。它是Java中的保留关键字,因此您无法覆盖它,就像您可以覆盖方法一样。它对类名进行操作 - 对于给定的类名,它返回类的新实例。它类似于一元-(减号)运算符,它接受一个整数并返回另一个整数(一个符号相反),只有新的,输入和输出是不同的类型。