本帖最后由 DaYiBaiJie 于 2011-10-25 10:42:09 编辑

解决方案 »

  1.   


    int num = 100;
    byte b = (byte) num;
    short s = (short) num;
      

  2.   

    这就是变量和常量的区别
    byte b = 127; //这个127是常量,编译器知道这个值,所以可以检查赋值是否合法int a = 127;      //这个a是变量,在程序运行的时候才会给a赋值127
    byte b = (byte)a; //所以编译器在这里不知道a的值是多少,只知道a是个int类型,
                         //要把int的值赋给一个byte,就必须强行转换
      

  3.   

    我知道这样的问题怎么处理,
    见下面:
          byte b=127;
          short s=32767;
          (这样可以)
    -------------------- 
          int num1=127;
          int num2=32767;
          byte b=(byte)num1;
          short s=(byte)num2;
    (此时需要类型的强制转换)
    我想问的是直接赋值数字没有问题,而将一个int型变量赋值就要强制转换了
    整数的默认类型不就是int吗?
    想问问其中的道理啊????
    (不知道是不是我的问题没有描述清楚,上面第一位说的是解决数据溢出,我不是问的这个啊....!!! )
      

  4.   

    LZ木有看我的回复?
    常量和变量的区别,想理解什么是常量什么是变量,在理解我在2L的回复
      

  5.   

    你的意思是不是
    byte b = 100;可以

    int num = 100;
    b = num为什么不可以?我是这样理解的 100的二进制为 1100100,只有7位,
    可以赋给b ,b有8位
    而 b = num;虽然还是100,但是他的位数已经是 32 位了
    当然就不能把32位的给8位的了
      

  6.   


    int a = 127; 这不是常量吗?怎么会是变量
      

  7.   

    有人可以说说第一个问题吗?
    --Java中的字符(char)占16位,却可以用超过16位的整数赋值(如32799);
      

  8.   

    char是16为,但是是无符号的,最大值是 1111 1111 1111 1111/FFFF/65535
      

  9.   

    问题是你要把a赋给b
    b = a;//对于这个语句来说,是把变量a的值赋给b,而不是把常量127赋给b,这就是区别
    char是无符号的,所以最大值是65535,比32799大,所以没问题
    可以自己打印查看char的最大值
    System.out.printf("%d\n", (int)Character.MAX_VALUE);如果超出char的范围,编译器一样警报,如
    char c = 0x1ffff;