[英]Why is new called an operator in Java?
为什么new
关键字在Java中称为运算符?
我知道new
在Java中为一个对象动态分配内存并返回对它的引用,但为什么它被称为运算符?
官方new
的不是运营商。 Java语言规范中没有这样的词,它是这个问题的唯一权威。
有一个类实例创建表达式 ,它涉及关键字 new
。
实际上,Java语言规范并没有调用new
的运算符。 它写道 :
由ASCII字符组成的38个令牌是运营商。
Operator: = > < ! ~ ? : -> == >= <= != && || ++ -- + - * / & | ^ % << >> >>> += -= *= /= &= |= ^= %= <<= >>= >>>=
我认为这是一个合理的定义,因为运算符将采用操作数(或者从源代码的角度出现在表达式旁边),但是后跟参数列表的类名本身不是有效表达式,也不是它被评估在运行时生成一个值。
我怀疑调用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.