int i;
i = 30; //这个好理解,因为i是基本数据类型..Integer I;
I = 30; //这个就不理解了,因为I是对象,而java似乎没有操作符重载的概念...

解决方案 »

  1.   

    这是JDK5.0之后自动装箱功能
    等同于Integer i = new Ingeger(30)
      

  2.   

    Java只重载了'+'这一个操作符。
    楼主举的这个例子是Java的自动包装机制,只有基本数据类型才有。
      

  3.   

    自动包装机制是不是就是当使用:
    对象 = 基本数据;
    这种方式赋值时,自动调用参数为基本数据的构造函数.
    如:
    Integer I;
    I = 30;
    class CInt {
    public CInt(int v) {
    this.v = v;
    } private int v = 0;
    }///////////////////////
    CInt int1;
    int1 = 30; //那为什么这里又不能自动包装了呢?
      

  4.   

    JAVA没有操作符重载。
    除了虚拟机自己定义好的。你楼上的推论,因为虚拟机没有实现这个功能。
    你不能认为Integer这个类,跟你的类是相同的。
    Integer和int之间的转换,不是语言的特性,而是虚拟机实现的一个功能。
    就如同
    for(int i: arr)
    {.....}
    你不能用foreach(int i: arr)
    {.....}
    进行替代。
    你说你的foreach也和for一样?
      

  5.   

    这里对int1赋值30是不对的,因为int1是一个CInt类型的对象,不能给它赋常量值。
    即使是自动包装机制,也只能把int包装成Integer,而不是包装成CInt。
    class CInt {
    public CInt(Integer v) {
    this.v = v;//这里把Integer对象赋值给int变量,用到了自动包装机制。
    } private int v = 0;
    }///////////////////////
    CInt int1 = new CInt(30);//这里把常量30自动包装为Integer对象。
      

  6.   

    学习了,记得哪本书书上讲Java抛弃了容易令人混淆的运算符重载,其实不对,还是有+和=(包装)的重载的
    ------------------------------------------------------AutoCSDN签名档------------------------------------------------------