黑马程序员技术交流社区

标题: 关于char类型是否可以存汉字的问题 [打印本页]

作者: 红茶2331    时间: 2013-11-8 09:09
标题: 关于char类型是否可以存汉字的问题
本帖最后由 红茶2331 于 2013-11-8 20:32 编辑

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

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

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

作者: ☆╰學不会☆╮    时间: 2013-11-8 09:14
本帖最后由 ☆╰學不会☆╮ 于 2013-11-8 09:16 编辑

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

作者: 赵许星    时间: 2013-11-8 09:15
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类型的变量可以存储任何字符,这些字符可以是英文字母、汉字、日文片段以及其他许多国家的字符
作者: ixiangfeng    时间: 2013-11-8 09:21
JAVA中的char可以储存绝大多数汉字 只有少数不可以 这和unicode编码有关
作者: 红茶2331    时间: 2013-11-8 09:26
☆╰學不会☆╮ 发表于 2013-11-8 09:14
我刚才试了 在eclipse中是可以输出的
我看你上面写的 char a='人' ;
记住一定是单引号 双引号就是string类 ...

我用editplus写的程序,用cmd编译就出错了,

作者: FFF    时间: 2013-11-8 09:36
把你的代码贴出来,让大家给你分析分析!{:soso_e113:}
作者: 红茶2331    时间: 2013-11-8 09:40
C:\Users\XK-21\Desktop\新建位图图像.bmp




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

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




作者: FFF    时间: 2013-11-8 09:54
本帖最后由 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.         }
复制代码
可以输出的呐?你的为什么不用?不要用截图。你用论坛上的代码功能。把你的代码贴出来。截图看不清。
作者: 红茶2331    时间: 2013-11-8 09:58
  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了,怎么还出错呢

作者: mayor125    时间: 2013-11-8 10:07
一个汉字占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>
作者: 红茶2331    时间: 2013-11-8 10:22
我感觉是编码原因,但我已经全改过来了,编码全是utf-8的,也不知道是哪一块的编码原因

作者: RuntimeError!    时间: 2013-11-8 11:02
和编码无关  楼主的char类型里面装的是双引号的字符串, 单个汉字要用单引号装。
别想多了- -  LS有几位误导新人啊- - 。。。。
作者: RuntimeError!    时间: 2013-11-8 11:14
好吧    在UE里面这么设置  视图(V)  -> 设置代码页   选择936   (ANSI/OEM - 简体中文GBK)
在试试  别用别的
作者: 黄炳期    时间: 2013-11-8 12:40
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html

作者: hel    时间: 2013-11-8 13:09
一个char是有两个八位组成的,也就是两个字节,
一个汉字存储的空间也是两个字节,所以一个char只能存储一个汉字
如果你写了两个或者更多是存不下的。
作者: 红茶2331    时间: 2013-11-8 20:27
黄炳期 发表于 2013-11-8 12:40
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89 ...

谢谢版主
作者: 落木萧萧    时间: 2013-11-10 13:44
是java文件编码的问题,用editplus要保存成gbk编码的,不然如果你用的其他编码而且文件中有中文,然后用javac编译就会报这样的错。还没有看到编码部分,不知道视频里有没有说这个事。
作者: Mr.__ㄨīn    时间: 2013-11-10 15:27
char 在java中是2个字节。一个汉字是两个字节。所以可以存放的。char在定义是用单引号。
char x = '我';
如果还是出错看看是不是编码问题了。




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