java中的运算符定义

时间:2014-07-24 06:59:48

标签: java operator-overloading operators

int i = 10;
i++; // it ok primitive value can use ++.

Integer integer = 10;
integer++; // how it can use ++

MyClass myClass  = new MyClass();
myClass++; // then why myclass can't use ++.

3 个答案:

答案 0 :(得分:4)

C ++能够重载运算符。 Java语言认为这可能会滥用太多(重载操作符可能会混淆)因此它从未被合并到Java中。

因此,您无法编写myClass++,因为语法不可用于指定该操作。

但是++确实可以选择非基元。被利用的机制称为 autoboxing 。 (基本上,底层的普通旧数据类型是从盒装类型中提取的,然后递增,然后重新装入原始引用类型)。

与此相关的是能够将+=+应用于java.lang.String个实例。简而言之,这是一个特例。虽然我完全意识到downvotes的风险,但我认为这是Java中最糟糕的问题之一,特别是+=将创建一个字符串的新实例(因为字符串本身是不可变的),并且许多Java程序员将不知道这对记忆的影响。

答案 1 :(得分:1)

来自Konstantin V. Salikhov评论中提供的Link

Integer有一个定义的方法可以返回int,然后定义++运算符。 MyClass没有++运算符,因此myClass++;无效

有问题的方法如下:

Integer myInteger = 10;
myInteger.intValue++;

Autoboxing是Java编译器在基元类型和相应的对象包装类之间进行的自动转换。

Java中的运算符重载在Operator overloading in Java

处有一个描述(关于它是不允许的)

答案 2 :(得分:1)

这是因为Java 1.5中添加了Java的自动装箱功能 编译器将转换语句如下

Integer integer = 10;
integer.iniValue++;

你可以尝试添加编译器标志" javac -source 1.4"它将返回错误