我没分给了 希望大大们帮忙 一个很基础的问题·· `````byte a,b,c;a=1;b=2;c=a+b;```````前后都省略了 就是 这里出问题了 为什么 a b c 为同类型 但是 a+b 给C赋值的时候 需要强制类型转换求帮忙 告诉我下 原理··· 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 JAVA本质上没有byte类型,你这里的a, b,c其实都是int型的 无论是short,char还是byte 它们在进行相加的时候都是自动转型为int型。JVM在把byte数据压入栈中的时候,会自动将byte数据的最高位,就是按照符号位增添24位,加上自身的8位,一共32位,构成int型。事实上java的数据运算不都是有自动向上转型么,有double转成double,有long转成long,有float转成float a=1;b=2;c=a+b;首先你已经把a和b都赋值成了int型的值了然后你把结果相加还是int型的 再付给byte型的c当然要转型啦 晕 不能因为是1,2就认为是int型,你怎么不把它说成是short型呢?int short byte它们的存储范围不一样,你能看出来1就是int型?!能看出来1在内存中是32位存储的?我还说1是16位存储的呢。那岂不就成了short了!所以具体是什么型的还要看在内存中的存储情况,就像2楼分析的一样,JVM为了避免我说的情况,就将所有的byte或者是short都自动升级为int类型 那么这么说的话 java中的 数据转换陷阱还挺多啊希望帮忙下 都哪些类型 可以隐式转换 如果按3楼的解释 是不是 如果我定义2个 char 或者 short 类型的变量 如果想加 后 结果就变成了 int型? byte 型,是要自动提升为int型的,要想得到byte型值,必须强转!!! 在运算的时候,无论是short,char还是byte 它们在进行相加的时候都是自动转型为int型再进行运算的,再向它们赋值的时候肯定要进行强制转换的,不然会报错哦 JAVA的原生数据是按照一定顺序转换的byte,short或者char->int->long->float->double按照就近原则转换,byte short char三种类型属于同一层次,所以相加的时候自然就近转换为int型,同样如果一个int 与long相加,就会自动转换为long,这样就不损失精度了 正则表达式的/****/i与/****/g又什么区别? Java控制面板里面设置Java Runtime参数 一个比较幼稚点的java连接sql问题 对象名无效 求不同格式的日期字符串转换成日期的通用解决方案 jbuilder9下配置Tomcat5.5 请教几个小问题!!! com.jspsmart.upload这个包 在哪里有下或者谁发给我?马上给分! 请帮帮我 有关PACKAGE 的应用(100 高分) 求助,java环境变量中的path和classpath什么关系,各自都引到的是谁的路径 有一定的挑战性:两台电脑传通讯,很简单的传输一点ascii数据,用什么协议比较好呢?
首先你已经把a和b都赋值成了int型的值了
然后你把结果相加还是int型的 再付给byte型的c当然要转型啦
所以具体是什么型的还要看在内存中的存储情况,就像2楼分析的一样,JVM为了避免我说的情况,就将所有的byte或者是short都自动升级为int类型
byte,short或者char->int->long->float->double
按照就近原则转换,byte short char三种类型属于同一层次,所以相加的时候自然就近转换为int型,同样如果一个int 与long相加,就会自动转换为long,这样就不损失精度了