参考自:
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