在java中,
char中永远存放的unicode编码的数值,范围是0到65535
1.你可以直接赋数值
2赋字符,存放的仍然是字符对应的unicode数值。
有两种形式:1.'李';2.'\u5e4e'
byte中存放的是整数值,范围是-128到127
1.直接将整数赋值给它.
2.赋字符给它.
byte赋值给char,实际上就是将byte中存放的整形值赋值给char。
当赋值给byte或者是char的值超过他们的范围时,会发生截断。
byte赋值给string的时候要考虑到编码问题。
system.out.println(byte[])打印的是byte[]对象的地址加上hashcode。
当存储在文件中时,一般是将byte和char转化为16进制字符串来存储。
- public static String bytes2HexString(byte[] b) {
- String ret = "";
- for (int i = 0; i < b.length; i++) {
- String hex = Integer.toHexString(b[ i ] & 0xFF);
- if (hex.length() == 1) {
- hex = '0' + hex;
- }
- ret += hex.toUpperCase();
- }
- return ret;
- }
byte[]转化十六进制的字符串,注意这里b[ i ] & 0xFF将一个byte和 0xFF进行了与运算,然后使用Integer.toHexString取得了十六进制字符串,可以看出
b[ i ] & 0xFF运算后得出的仍然是个int,那么为何要和 0xFF进行与运算呢?直接 Integer.toHexString(b[ i ]);,将byte强转为int不行吗?答案是不行的.
其原因在于:
1.byte的大小为8bits而int的大小为32bits
2.java的二进制采用的是补码形式