首先Java中的关于数据转换的规则如下:
1.类型要兼容
2.目标类型大于源类型(小于源类型要强制转换)
------------------------------------------
首先说一下能兼容的:
类型    字节
byte     1
short    2
int      4
long     8
float    4
double   8
char     2
-------------------------------------------
看如下代码:
byte a=(short)1;
byte b=(int)1;
byte c=(char)1;
首先是强制类型转换为小括号中的数据类型 
自动转换为byte型
但是为什么会自动类型转换???(目标类型小于源类型)

解决方案 »

  1.   

    因为编译器明显很容易能判断字面常量值1没有超出范围,如果是变量,就没法判断了:int t = 1;
    byte a=(short)t;
      

  2.   

    只能小的转为大的
      JDK1.4是不会自动转的
     会报错
      

  3.   

    我已经测试  上边代码能成功编译  我只能说myeclipse太牛逼啦!! 如果把1换成128就编译出错,它居然还能自动检测啊  晕啊
      

  4.   

    但是如果换成// byte d=(double)1;
    // byte e=(float)1;
    // byte f=(long)1;   这三条语句就会报错!!
      

  5.   

    已经有人试过了 就不用我说了  
    这个 ……
    到底是怎么回事?
    Why???
      

  6.   

    你懂什么叫‘强制’类型转换吗,强制是不以人的一直为转移的自然真理,
    t
    The earth always goes around the sun,that is it.
      

  7.   

    byte占一个字节,最大127
    编译器会自动判断是否可以转,byte b=(int)1;这种情况,1<128,所以编译器通过。但是,当这样:byte a=(int)128;编译器就会报错了。
      

  8.   

    byte范围是-128到+127, java中char实际是用ascii码表示(是一个int整数),char字符转为byte, 字符ascii码大小只要不超过127, 编译器是不会报错的! 
    比如: byte a = 'a';(正确,根据'a'的ascii码)  byte b = 127;   (类型都为int)    byte d = (short)123; (正确,short宽度小于int)
    byte c = '错';(错误, ascii码确定超过127)
    只要目标类型不比int类型宽,数值在-128-127之间,编译器都是不会报错的!
      

  9.   

    java的数值最小的实际存储类型是int,比int小的都存为int,所以比int小的都可以自动转换为int,当然前提是不超出其取值范围,取值范围具体见API
      

  10.   

    但是
    byte a=(short)1;/*等号右边的表达式的值是2字节 存1字节byte的时候必须要进行强转啊?这个是怎么回事?*/
    byte b=(int)1;/*这个:右边的表达式的值为4字节 左面的变量为1字节 怎么会自动转换?*/
    byte c=(char)1;/*右面是2字节 左面是1字节*/
      

  11.   


    byte a = (char)127;
    byte a = (char)128;为什么127那个可以通过编译,但是下面的确不可以了。之前看LZ的问题的时候觉得特别怪异,想不通为什么能自动转换。我这个谁能给个解释。
      

  12.   

    每种基本数据类型都有自己的表数范围(详见说明文档),对于常数(字面值,说法不一,比如,1,123456都为常数)编译器能够识别是否在该变量类型的表数范围之内,如果在就无需强转,但是如果一种类型的变量指向了另外变量(类型表数范围比源类型大,必须强转,类型一致,但右边是数学运算,比如+1,-1,右边的类型范围自动提升为int,如果本类型表数比int小,那么必须强转):常数,编译器能够识别,但加了变量,编译器无法确定范围