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 ++.
答案 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"它将返回错误