繁体   English   中英

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

[英]Why is new called an operator in Java?

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

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

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

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

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

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

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

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

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

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

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

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

您可以创建这样的实例:

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

或者不是new它可能是+

A some = +A();

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM