请教大家,关于byte类型的运算问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教大家,关于byte类型的运算问题相关的知识,希望对你有一定的参考价值。
因为System.in.read()这个方法,要带参数sun只提供了read(byte[] b) ,也就是说只能用字节数组来做缓冲,符合计算机内存的存储机制以字节为单位存储数据,以int或char存储会增加开销(具体存储及效率涉及到一些系统结构知识)类System 的静态in字段返回 InputStream类型, InputStream它的read方法只有read(),read(byte[] b),read(byte[] b, int off, int len)三个方法。
"0".getBytes(),这里0是个String类型,对其getBytes()返回的是字符串0的字节数组48,所以a为48;而c为byte类型,其值就为0,所以就有此输出。 参考技术A 因为在计算6!的时候,此时参与运算的fac的值是120,fac>Byte.MAX_VALUE(127)为false,所以6!=720仍然会输出,运算结束后,返回的fac是720>Byte.MAX_VALUE,输出结果为7!=值已经超出数据类型范围!!和异常信息。
关于Java运算中类型自动提升的问题
1.表达式中的自动类型提升:
表达式求值时,Java自动的隐含的将每个byte、short或char操作数提升为int类型,这些类型的包装类型也是可以的。
例如:short s1 = 1;
s1 = s1 + 1;
s1+1运算中的操作数s1会被自动提升为int类型,s1+1运算结果会成为int类型,再赋值给short类型的s1时,编译器会报告需要强制转换类型的错误。需要改为short s1=1; s1=(short)(s1+1);结果就是short类型。
例如:short s1 = 1;
s1 += 1;
+=是java语言中的运算符,Java编译器会对它特殊处理进行正确的编译。
2.类型提升规则:
byte、short和char类型的值都被提升为int类型;
如果有一个操作数是long类型,就将整个表达式提升为long类型;
如果有一个操作数是float类型,就将整个表达式提升为float类型;
如果任何一个操作数为double类型,结果将为double类型。
例如:
byte b=1;
char c=‘a‘;
short s=1024;
int i=50;
float f=2.0f;
double d=.123;
double result = (f * b) + (i / c) - (d * s);
f*b中,b被自动提升为float类型,该表达式结果是float类型;
i/c中,c被自动提升为int类型,该表达式结果是int类型;
d*s中,s被自动提升为doubl类型,该表达式结果是double类型;
最后,float+int-double,结果会被提升为double类型,double类型为最后结果result的类型。
3、测试一个int类型数据与float数据运算后,测试结果是什么类型
public class Test { public void test(float f) { System.out.println("float"); } public void test(double d) { System.out.println("double"); } public void test(int i) { System.out.println("int"); } public static void main(String[] args) { Test t = new Test(); int i = 10; float f = 10f; t.test(f * i); } }
最后结果显示为float类型
以上是关于请教大家,关于byte类型的运算问题的主要内容,如果未能解决你的问题,请参考以下文章