char 和 byte 区别

byte 是字节数据类型 ,是有符号型的,占1 个字节;大小范围为-128—127 。

char 是字符数据类型 ,是无符号型的,占2字节(Unicode码 );大小范围 是0—65535 ;char是一个16位二进制的Unicode字符,JAVA用char来表示一个字符 。

1,char可以表示中文字符,byte不可以;

2,char可以表示一个整数,但不能带符号,只能是正数,范围是0-65535;byte有符号型整数,范围是-128-127;

3,char对于英文字符可以直接转换(按Unicode码) 例如 :char c = 65;  System.out.println(c); 结果为A

注意:char c ='A'  ,变量中实际存储的是该字符的Unicode编码

题外话:

示例: 下面的程序计算了一个循环的迭代次数,并且在该循环终止时将这个计数值打印了出来。那么,它打印的是什么呢? 

public static void main(String[] args) {
		byte bytes[] = new byte[256]; 
		for (int i = 0; i < 256; i++) 
		bytes[i] = (byte)i; 
		String str = null;
		str = new String(bytes);
		for (int i = 0, n = str.length(); i < n; i++) 
		System.out.println((int)str.charAt(i) + " "); 
	}

 

  

 

byte数值通过String构造器被转换成char数值,最后char数值被转型成int数值被打印出来.

因为char是无符号的,所以byte的负值转成 char型是一个非数值型的特定字符.String构造器在未指定字符集的时候,采用jre的缺省字符集. 在通过解码使用平台缺省字符集的指定byte数组来构造一个新string 时,该新string 的长度是字符集的一个函数,因此,它可能不等于byte数组的长度.当给定的所有字节在缺省字符集中并非全部有效时,这个构造器是不确定的.

只有"ISO-8859-1"能让该程序按顺序打印0-255,此处应显示的指定字符集.str = new String(bytes,"ISO-8859-1");

 

posted @ 2017-04-06 19:50  菜鸟心晴  阅读(6694)  评论(0编辑  收藏  举报