java的编码

在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进制字符串来存储。

  1. public static String bytes2HexString(byte[] b) {  
  2.     String ret = "";  
  3.     for (int i = 0; i < b.length; i++) {  
  4.         String hex = Integer.toHexString(b[ i ] & 0xFF);  
  5.     if (hex.length() == 1) {  
  6.         hex = '0' + hex;  
  7.     }  
  8.      ret += hex.toUpperCase();  
  9.   }  
  10.   return ret;  
  11. }  

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的二进制采用的是补码形式 

 

 

你可能感兴趣的:(java)