java中的byte问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中的byte问题相关的知识,希望对你有一定的参考价值。

class num
public static void main(String args[])
String str="hello";
byte s[]=str.getBytes();
s[0]=s[0]+5; //这里不明白
System.out.printf("%c",s[0]);


如果把含注释的那句改为s[0]++;就没问题了,为什么只能自加!

参考技术A 这句:

s[0]=s[0]+5; //这里不明白
编译是会报错的!因为5是整型,与s[0]进行加运算后赋给s[0]是会损失精度的(把一个32位的数存储到一个8位的数中也容纳不了)java是不允许这样的。
至于s[0]++为什么会通过,就要看++运算的本质原理了。
参考技术B public class num
public static void main(String args[])
String str="hello";
byte s[]=str.getBytes();
s[0]+=5; //这里不明白
System.out.printf("%c",s[0]);


这样就可以了.因为你的s[0]是byte类型的,而5是int类型的,因此s[0]=s[0]+5这句会损失精度.使用s[0]+=5可以达到你原来的效果并且保持原来的数据类型.s[0]++其实就相当于s[0]+=1,并不会改变数据类型.
参考技术C 这样是不可以的,因为在JAVA里byte类型只是占8个字节,也就是说它所能表示的数值范围只能是-128~127而已,所以如果你给它赋值208的就会发生溢出,会导致为-48的,如果你一定要等于208,只能用Int类型了,就是 (int)
Integer.parseInt("d0",16),这样会得到208了!

如果你觉得我的回到对你有帮助的话吗,请采纳,你的采纳是我不断前进的动力,谢谢!!
参考技术D String str="hello";
byte s[]=str.getBytes(); //这里是将字符串转换成字节数组
s[0]=(byte) (s[0]+5); //s[0]是'h'对应的ASCII码表的值是104,104+5 109对应ASCII对应的是 m
System.out.printf("%c",s[0]);//输出 m本回答被提问者和网友采纳
第5个回答  2012-10-06 因为s[0]+5是整型,S[0]是字符型,需要强制类型转化s[0] = (byte) (s[0] +5);

java中的byte有啥作用

参考技术A 在今天,byte字节就是一个八位元组,使用其它位数的机器都进了博物馆。 java也提供了一个byte数据类型,并且是基本类型。java byte是做为最小的数字来处理的,因此它的值域被定义为-128~127,也就是signed byte。不幸的是,byte的用作计数的时间远少于用表达基本内存单元的时间。比如从stream里读入一个双字节字符,我们先收到2个byte。为了把byte转换成适当的形式,需要对byte值做一些比较,比如判断字符集要比较其是否在某个编码范围内,比如GBK 0x8140~0xFEFE,然后new适当的string。 signed byte 把 0x00 ~ 0xff 映射成 0~127 -128~-1 两段,注意当与literal比较时,java自动将literal识别成int 可以用 下面的小程序来验证: 1 public class JavaByte 2 3 public static void main(String[] args) 4 5 byte b = 0; 6 for ( int i = 0; i <= 0xff; ++i ) 7 8 b = (byte)i; 9 System.out.print(" "+i+":"+b+", "); 10 11 12 当收到(0xC7B0)这个GBK字符时,要判断 0x81 <= 0xC7 <= 0xFE 是否成立,实际变成判断 -127 < -57 < -2,唔,万幸,可以直接比较 low < ch < high。如果要判断 0x00 <= 0xC7 <= 0x80 (ASC Char),这回麻烦了,变成判断 (0 <= -57 <= 127) || ( 0x57 == -128 )。比较简单的办法用 (b+256)%256的办法令其值回到0~255,或者用&0xff并赋给一个int。考虑到jvm里的byte其实也是32位的,所以在计划用byte的地方,直接用integer并不会有什么实际的损失,而 DataInputStream也提供了一个readUnsignedByte()方法返回的是int。所以真正的解决方案是忘掉byte,直接上 int。至于为什么java没有unsigned数据类型,照下面这个interview里Jams Golsing的意思,应该是java应该简单而unsigned算术过于复杂了会让大多数程序员产生误解误用:

以上是关于java中的byte问题的主要内容,如果未能解决你的问题,请参考以下文章

java中的byte有啥作用

java 无符号byte转换

java中的Random.nextBytes(bytes [])行为

java redis 问题

Java Mapped Byte Buffer - 缓冲区中的垃圾值

java中的byte有什么作用?