byte
- 1字节(8bit)
- -128 ~ 127
注意事项:
- 127 ~ 256 之间的数,要获取实际数字需要
&0xff
- 一旦
超过256
,小于-128
,乘以0xff
这个方法就使不了了。
包装类型:Byte
Byte转其它类型
转无符号的int和long
适用于 0 ~ 255
的范围,此处就使用&0xff
由上图,可见包装类型Byte中,所谓shortValue()
、intValue()
、longValue()
、floatValue()
、doubleValue()
其实就是就其 byte数据直接强转返回,无需自己写而已。
没什么特别的,范围还是那么大。
其他的包装类中同样有强转
其它基本数据类型的快捷方式。
Byte的toString
方法其实是输出其int
值。
String转byte/Byte/Byte[ ]
parseByte
– 返回 byte
:
- 默认字符串是十进制,
radix设为10
然后调用 (2)
byte parseByte(String s);
- 实际上是使用
Integer.parseInt(s, radix)
将字符串以对应进制转换为int
值后
再强转为byte返回
byte parseByte(String s, int radix)
下图中可见,获取到int值后是有判断的,不在Byte定义的范围内
则会抛出数字转换异常
构造方法
Byte有参构造就两个:
byte
和String
String的有参构造里用的就是 parseByte(String s, int radix)
valueOf – 返回 Byte
:
- 同上,默认
radix设为10
然后调用 (2)
Byte valueOf(String s)
Byte valueOf(String s, int radix)
Byte是怎么将得到的byte转成Byte呢?
调用了 ↓
Byte valueOf(byte b)
实际上是使用调用 parseByte(String s, int radix)
将获取到的 byte
值加上默认偏移量128(得到数组下标) 在 内部类ByteCache 缓存池中寻找对应的Byte值
内部类ByteCache
:
定义了一个静态Byte数组cache
(大小256),由静态块初始化数组内容,将 -128 ~ 127依次放入 0 ~ 255中
比如byte
此刻值为17,那么在cache中下标 17+128 处存有对应Byte
故而有了上面return ByteCache.cache[(int)b + offset];
因为是静态常量,初始化即建立。
其实除了Float和Double由于小数点情况复杂没法弄,其它很多包装类都有涉及到常量池
总结
- 127 ~ 256 之间的数,要获取实际数字需要
&0xff
- 一旦
超过256
,小于-128
,乘以0xff
这个方法就使不了了。 - 有常量池,
byte
值+128 就是下标,可取对应Byte
值 String
可以转byte / Byte
,可指定进制,不指定默认十进制
。但必须是其范围内的数,否则报错。String
转byte / Byte
实际上靠的是Integer.parseInt(s, radix)
和ByteCache
Byte
的intValue()
等方法和byte
强转本质上没有区别,toString
是直接输出其int
值- 有参构造只能传
byte
/String
- 规则:
parseByte
返回基本数据类型,valueOf
得到包装类型