情况1
x = x+y;//合法
x += y; // 不合法
情况2 
x = x+y;// 不合法
x += y; // 合法请分别写出符合上述条件的代码样例。

解决方案 »

  1.   

    short 和 byte之类的,进行
    x=x+y; 时必须进行强制转换。
    第二个???
      

  2.   

    情况1 
    x = x+y;//合法 
    x += y; // 不合法 
    例如给出如下的声明:Object x=“hello”;String y=“java world!!”;则简单赋值是合法的,因为x+y是String类型的,String与Object是类型兼容的;符合赋值运算是非法的,因为左侧是Object类型,而右侧是String类型。本谜题可解。情况2 
    x = x+y;// 不合法 
    x += y; // 合法 对x和y做如下声明:short x=0;int y=123456;复合赋值语句x+=y;将不会产生编译错误,但x的值不会是123456,因为int类型的值123456对short类型来说太大了,自动窄化类型转换会将他转成-7616。但毕竟它是合法的。而简单复制语句x=x+y;则是非法的,因为它试图将一个int类型的数据赋值给一个short类型,这是不能通过编译的。这个谜题告诉我们:复合赋值表达式可能是危险的,不要将复合赋值操作符用于byte、short或char类型的变量,而将复合赋值操作符用于int类型变量时,要确保表达式右侧不是long、float或double类型的变量,将复合赋值操作符用于float类型变量时,要确保表达式右侧不是double类型的变量,否则可能会出错。
      

  3.   

    情况1 
    x = x+y;//合法 
    x += y; // 不合法 
    x为Object,y为String情况2 
    x = x+y;// 不合法 
    x += y; // 合法 x为byte,short,y为byte,short,int,long等
      

  4.   

    x += y =>x = (object)(x + y)