看了SCJP的书,书上是这样说的
1.不能先加宽,后装箱(int不能变成LONG)
2.可以先装箱,后加宽(int可以通过Integer变成Object)下面的那个我意思懂了  int装箱到Integer 由于Integer is-a Object所以可以加宽
可是上面的呢  我把int加宽成为long  再装箱到Long 不可以吗  请教达人回答  public class WidenAndBox {         //这是书上的例题,执行后是错误的 也就是1.所指出的 可是我不懂为啥
static void go(Long x){
System.out.println(x);
}
public static void main(String[] args) {
byte b=5;
go(b);
}
}

解决方案 »

  1.   

    int 加宽成long是不允许的

    long t=100
    这个是编译不过去的
    只能是 long t=100L自动装箱是因为编译器自动调用了valueOf方法,编程了对象
    而对象之间根据多态,子类对象可赋给基类的引用
    而所有的包装器类都是Object子类,所以可以赋,其实也不是第2句说的什么加宽至于基本类型之间,java是强类型,不能简单的加宽 
      

  2.   

    我也看不明白,不过今天我试过了,我觉得问题不是那句话,主要是Long只能由long转换成,Integer只能是int转换成,就是说,要封装成Long或者Integer的只有他们旗下的基本类型即:前者为long,后者为int。当然如果你把int转成long再封装成Long当然可以,那就符合了,Long只能由long转成这个规则了,楼上所说的不知道是什么版本的,我现在用的是JDK1.6的,long t=100是可以编译运行的,也就是说,你先把int封装成Integer也是不能加宽成Long的,因为包装类不能互相加宽,也就是说,能加宽的,就只是把其他包装类加宽到Object,只要涉及到包装类,就一定要先显示(自己写代码)转成那个基本类型,再转成包装器类
      

  3.   

    简单来说就是,基本类型按基本类型规定的转成更长的类型,类的按照IS-a测试去加宽