参考自:

http://sudongyuan.iteye.com/blog/869949

http://www.2cto.com/kf/201303/193644.html

java八种基本类型:byte、char、short、int、long、float、double、boolean。

其中对byte和char不熟悉,基本没有使用过:还有就是两者和String的区别。

byte 是字节,char 是字符 string 是字符串,两个字节构成一个字符,多个字符构成字符串。

byte 是字节数据类型 ,是有符号型的,占1 个字节;大小范围为-128—127 。char 是字符数据类型 ,是无符号型的,占2字节(Unicode码 );大小范围 是0—65535 ;char是一个16位二进制的Unicode字符(UTF-8是Unicode的实现方式之一。),JAVA用char来表示一个字符 。其中char是无符号的,不能表示负数。char、byte、int对于英文字符,可以相互转化。char可以表示中文字符,byte不可以。

char类型一般占用两个字节,所以能存储中文字符(一个中文字符占用两个字节)。

         char a = '中' ;(合法)   char a = 'ab' ;(非法的)

       所以char类型在内存中占用两个字节空间,但是只能表示一个字符。若是只要表示一个字节的字符,可以考虑byte。

byte表示字节,占用内存一个字节的空间。

        byte a = 'a' ;(合法)    byte a  = '中' ;(非法的,不能存放中文字符)

另外:1 byte = 8 bit (bit就是0和1的一个位数,8bit表示一个字节)

 

String str = "中" ;
 byte[]  a = str.getBytes();
 System.out.println(a.length); //打印出多长?
 result:可能2,3,4.

原因是getBytes()方法会根据当前默认的字符编码格式获取字节数组,gbk/gb2312占2位,utf-8占3位,unicode占4位(自己使用GBK结果为2,使用UTF-8结果为3)。

char在Java中是16个字节 
byte在Java中是8个字节 


char c = (char) -3; // char不能识别负数,必须强制转换否则报错,即使强制转换之后,也无法识别   

 

  System.out.println(c);   

 

  byte d1 = 1;   

 

  byte d2 = -1;   

 

  byte d3 = 127; // 如果是byte d3 = 128;会报错   

 

  byte d4 = -128; // 如果是byte d4 = -129;会报错   

 

  System.out.println(d1);   

 

  System.out.println(d2);   

 

  System.out.println(d3);   

 

  System.out.println(d4);


结果为:


?


1


-1


127


-128


2、char可以表中文字符,byte不可以,如:

[html]    

 

  char e1 = '中', e2 = '国';   

 

  byte f= (byte) '中'; //必须强制转换否则报错   

 

  System.out.println(e1);   

 

  System.out.println(e2);   

 

  System.out.println(f);


结果为:




45


3、char、byte、int对于英文字符,可以相互转化,如:


[html]  www.2cto.com 

 

  byte g = 'b'; //b对应ASCII是98   

 

          char h = (char) g;   

 

  char i = 85;    //U对应ASCII是85   

 

  int j = 'h';    //h对应ASCII是104   

 

  System.out.println(g);   

 

  System.out.println(h);   

 

  System.out.println(i);   

 

  System.out.println(j);


结果为:


98


b


U


104