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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 红茶2331 中级黑马   /  2013-11-8 09:09  /  4600 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 红茶2331 于 2013-11-8 20:32 编辑

大神们,今天学习char类型时,遇到了一个问题

char 类型到底能不能存放汉字。我在看一本零基础学java的书,书上的实例
char a="人";
System.out.println(a);是可以输出的, 而我自己写的时候,编译就不成功了。

我去网上查资料,大家的意见都不一样,有的说,是编码的问题,有的说是可以存放汉字的,求解啊{:soso_e134:}

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

17 个回复

倒序浏览
本帖最后由 ☆╰學不会☆╮ 于 2013-11-8 09:16 编辑

我刚才试了 在eclipse中是可以输出的
我看你上面写的 char a='人' ;
记住一定是单引号 双引号就是string类型的了。编译的话肯定会出错。
java中的char类型 占两个字节 可以存放世界上任意一个字符。包括汉字  特殊字符之类的。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
java的char占用两个字节,刚好可以存储一个汉字。
ASCII的char只用一个字节,就不可以了。

计算机中数据的存储是以字节为单位的,常见的磁盘大小和文件大小分别以
GB、MB、KB等来表示的,它们之间的换算单位是1GB等于1024MB,1MB等于1024KB
,1KB等于1024byte(字节),每个字节的取值范围为-128到127,它可以保存一个
英文字符,包括字母、数字和英文标点,而汉字的存储是由两个字节保存的,
因为汉字的数量太多了,它的编码范围远远超过一个字节的取值范围,所以必须
使用双字节来表示,在java语言中,使用unicode字符集对字符进行编码,可以
存储65535个字符,所以java的字符类型被定义为双字节,因此在java语言中可以使用char类型的变量来存储汉字

在java中一个char类型的变量占16位(即两个字节)的存储空间,由于java语言
用unicode字符集对字符进行编码,因此char类型的变量可以存储任何字符,这些字符可以是英文字母、汉字、日文片段以及其他许多国家的字符

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
JAVA中的char可以储存绝大多数汉字 只有少数不可以 这和unicode编码有关
回复 使用道具 举报
☆╰學不会☆╮ 发表于 2013-11-8 09:14
我刚才试了 在eclipse中是可以输出的
我看你上面写的 char a='人' ;
记住一定是单引号 双引号就是string类 ...

我用editplus写的程序,用cmd编译就出错了,
回复 使用道具 举报
把你的代码贴出来,让大家给你分析分析!{:soso_e113:}
回复 使用道具 举报
C:\Users\XK-21\Desktop\新建位图图像.bmp




上面那是我写的程序。直接编译居然出错,eclipse里面好像是好使的

里面有一个错误显示编码GBK不可编译字符,我的编码已经改成utf-8



回复 使用道具 举报
FFF 金牌黑马 2013-11-8 09:54:30
8#
本帖最后由 FFF 于 2013-11-8 09:55 编辑
红茶2331 发表于 2013-11-8 09:40
上面那是我写的程序。直接编译居然出错,eclipse里面好像是好使的

里面有一个错误显示编码GBK不可编 ...
  1.         public static void main(String[] args){
  2.                 char a = '加;
  3.                 System.out.println(a);
  4.         }
复制代码
可以输出的呐?你的为什么不用?不要用截图。你用论坛上的代码功能。把你的代码贴出来。截图看不清。
回复 使用道具 举报
  1. class char1
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 char a='人';
  6.                 System.out.println(a);
  7.                 System.out.println("人"+a);
  8.         }
  9. }
复制代码
有一个错误,说是GBK不可映射的字符,我已经改成utf-8了,怎么还出错呢
回复 使用道具 举报
一个汉字占2个字节,而char类型在Java中也是占2个字节,我刚用editplus试过了,通过cmd是可以编译可以运行成功的。
  1. class Test
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 char a = '人';
  6.                 System.out.println(a);
  7.                 System.out.println("人"+a);
  8.         }
  9. }
复制代码
打印结果:
F:\Java2013>javac Test.java

F:\Java2013>java Test

人人

F:\Java2013>

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
我感觉是编码原因,但我已经全改过来了,编码全是utf-8的,也不知道是哪一块的编码原因
回复 使用道具 举报
和编码无关  楼主的char类型里面装的是双引号的字符串, 单个汉字要用单引号装。
别想多了- -  LS有几位误导新人啊- - 。。。。
回复 使用道具 举报
好吧    在UE里面这么设置  视图(V)  -> 设置代码页   选择936   (ANSI/OEM - 简体中文GBK)
在试试  别用别的
回复 使用道具 举报
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
hel 中级黑马 2013-11-8 13:09:57
15#
一个char是有两个八位组成的,也就是两个字节,
一个汉字存储的空间也是两个字节,所以一个char只能存储一个汉字
如果你写了两个或者更多是存不下的。
回复 使用道具 举报
黄炳期 发表于 2013-11-8 12:40
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89 ...

谢谢版主
回复 使用道具 举报
是java文件编码的问题,用editplus要保存成gbk编码的,不然如果你用的其他编码而且文件中有中文,然后用javac编译就会报这样的错。还没有看到编码部分,不知道视频里有没有说这个事。
回复 使用道具 举报
char 在java中是2个字节。一个汉字是两个字节。所以可以存放的。char在定义是用单引号。
char x = '我';
如果还是出错看看是不是编码问题了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马