A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 雷丹 中级黑马   /  2013-10-24 16:18  /  1163 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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”是什么意思  

评分

参与人数 1黑马币 +3 收起 理由
李江 + 3 赞一个!

查看全部评分

6 个回复

正序浏览
To 金牌黑马 2013-10-27 16:08:10
7#
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释帖:http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
楼主在这个问题上纠结,我觉得是对编码不清楚造成的。
首先,咱必须清楚的了解,一切事物在计算机中表示都是通过二进制实现的
楼主用的char其实也是通过二进制表示的,说到底是一串01组合的数据,
一串串01的数据对于人来说,肯定不好看懂,为了方便人们与计算机交流,
也就出现了码表,码表是什么呢?其实就是一个翻译的规范,当你在电脑上输入‘A’时,
计算机就会根据码表翻译成01串,给计算机使用,而当人需要读取数据时,01串就会根据码表翻译成A
对于不同国家地区的需求,就有了不同的码表,而java采用的是unicode码表,这个码表的特点是
所有字符都采用两个字节表示,包含大部分国家地区的语言文字。

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

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
因为在java中是用unicode进行编码的,每一个字符在unicode中都对应唯一的编码。你可以查看一下‘:’的整数值,同时你也可以查看一下‘\u003a’的整数值,你就会发现它们两的值是相同的,都是58。所以它们表示的是同一个字符。只不过‘\u003a’是用unicode方式写的而已。
回复 使用道具 举报
char 类型用杢表示在 unicode 编码表中的字符; unicode 编码被设计
用杢处理各种语言的所有文字,它占 2 个字节,可允许有 65536 个字符,ASCII 码占 1 个字节,
可允许有 128 个字符,是 unicode 编码表中前 128 个字符;unicode 具有从 0 到 65535 乊间的
编码,他们通常从'\u0000'到'\uFFFF'乊间的 16 迚制值杢表示(前缀 u 表示 unicode);
先你定义的a和b都是char类型的,根据编码表\u003a对应的字符就是  :   
希望能帮助你。

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
你这是从别的地方copy过来的啊。{:soso_e141:}       
回复 使用道具 举报
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编码表中的“:”,这个字符。我想应该是这样。

评分

参与人数 1黑马币 +3 收起 理由
李江 + 3

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马