黑马程序员技术交流社区

标题: 一道简单的java题 [打印本页]

作者: 雷丹    时间: 2013-10-24 16:18
标题: 一道简单的java题
class ZiFu
{
public static void main(String[] args)
{
char a='A';
char b='\u003a';
System.out.println("第一个字符类型的值等于"+a);
System.out.println("第二个字符类型的值等于"+b);
}
}

1.为什么b的值会等于“:”
2.“\u003a”是什么意思  
作者: wenbaoxing    时间: 2013-10-24 16:39
JAVA中的Unicode是什么意思?比如char b='\u003a',为什么输出为空?

书上的解释:Unicode编码字符是用16位无符号整数表示的,既有2^16个可能值。

就是说Unicode编码是用16位无符号的二进制数来进行编码的 0000 0000 0000 0001,这16位二进制就对应一个字符,无符号位就是说都是正整数,在二进制中一般以1开头的一串二进制是负数,以0开头的一串二进制数是正数,所以一般二进制的第一位就是他的符号位,无符号就是不考虑这种情况,一位二进制有两种可能不是0就是1,那两位二进制就有四种可能,00,01,10,11,即两位的二进制就能编码出4种字符,所以一次类推,16位就能编码出2^16种字符

char b='\u003a'     这句当中的003a,应该是一个十六进制的地址,对应着Unicode编码表中的“:”,这个字符。我想应该是这样。
作者: 王松松    时间: 2013-10-24 16:40
你这是从别的地方copy过来的啊。{:soso_e141:}       
作者: 1961993790    时间: 2013-10-25 11:07
char 类型用杢表示在 unicode 编码表中的字符; unicode 编码被设计
用杢处理各种语言的所有文字,它占 2 个字节,可允许有 65536 个字符,ASCII 码占 1 个字节,
可允许有 128 个字符,是 unicode 编码表中前 128 个字符;unicode 具有从 0 到 65535 乊间的
编码,他们通常从'\u0000'到'\uFFFF'乊间的 16 迚制值杢表示(前缀 u 表示 unicode);
先你定义的a和b都是char类型的,根据编码表\u003a对应的字符就是  :   
希望能帮助你。
作者: 流行语    时间: 2013-10-25 11:48
因为在java中是用unicode进行编码的,每一个字符在unicode中都对应唯一的编码。你可以查看一下‘:’的整数值,同时你也可以查看一下‘\u003a’的整数值,你就会发现它们两的值是相同的,都是58。所以它们表示的是同一个字符。只不过‘\u003a’是用unicode方式写的而已。
作者: 雨过丶天已晴    时间: 2013-10-25 13:04
楼主在这个问题上纠结,我觉得是对编码不清楚造成的。
首先,咱必须清楚的了解,一切事物在计算机中表示都是通过二进制实现的
楼主用的char其实也是通过二进制表示的,说到底是一串01组合的数据,
一串串01的数据对于人来说,肯定不好看懂,为了方便人们与计算机交流,
也就出现了码表,码表是什么呢?其实就是一个翻译的规范,当你在电脑上输入‘A’时,
计算机就会根据码表翻译成01串,给计算机使用,而当人需要读取数据时,01串就会根据码表翻译成A
对于不同国家地区的需求,就有了不同的码表,而java采用的是unicode码表,这个码表的特点是
所有字符都采用两个字节表示,包含大部分国家地区的语言文字。

前面楼主的char a = 'A';计算机所运用的其实并不是A这个字符,而是查找码表后的01串,说到底,也就是数值
后面的char b='\u003a';其实就是‘:’所对于的01串的16进制而已,
希望对楼主有帮助,说的不对的,大家多多指正{:soso_e113:}

作者: To    时间: 2013-10-27 16:08
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2