如何声明x和y以便x + = y给出编译错误而x = x + y不?

kns*_*shn 55 java operators shorthand

我在接受采访时遇到了这个问题,无法提出解决方案.我知道反之亦然,如"+ ="运算符在Java中的作用所示?

所以问题如下.

..... x = .....;
..... y = .....;

x += y; //compile error
x = x + y; //works properly
Run Code Online (Sandbox Code Playgroud)

Cra*_*igy 55

试试这个代码

Object x = 1;
String y = "";

x += y; //compile error
x = x + y; //works properly
Run Code Online (Sandbox Code Playgroud)

不完全确定为什么会这样,但编译器说

对于参数类型Object,String,运算符+ =未定义

我假设对于第二行,toString在Object上调用.

编辑:

它是有道理的,因为+=操作符在一般对象上没有意义.在我的示例中,我将一个int转换为一个Object,但它只取决于xObject类型:

Object x = new Object();
Run Code Online (Sandbox Code Playgroud)

它只有在x是Object 时才有效,所以我实际上认为String更像是Object的直接子类.这将失败x + y:

Foo x = new Foo();
Run Code Online (Sandbox Code Playgroud)

对于我尝试过的其他类型.

  • 如果x是Object而y是String,则x + = y应该编译,请参阅http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7058838 (6认同)