[转载]Java char 与 byte

转载自 Java char 与 byte

问:java char 能否存储一个汉字,为什么?
答:char 类型一般默认占用两个字节,所以能存储中文字符(一个中文字符占用两个字节),所以 char c1 = '我'; 是合法的,而 char c2 = 'ab'; 是非法的,所以 char 类型在内存中占用两个字节空间,但是只能表示一个字符,若是只想表示一个字节的字符可以使用 byte。

问:下面程序段的输出是什么?

String str = "我";
byte[] c1 = str.getBytes();
System.out.println(c1.length);

答:可能是 2、3、4 之一。在我本机输出是3,因为 getBytes() 方法会根据当前默认的字符编码格式获取字节数组,gbk/gb2312 占 2 位,utf-8 占 3 位,unicode 占 4 位。所以写代码时最好指定编码,譬如可以通过 str.getBytes("GBK"),str.getBytes("UTF-8") 来指定输出。

问:下面程序段的输出是什么?

public class Test {
    public static void main(String[] args) {
        char n = 'b';
        System.out.println(++n);
        System.out.println(n+1);
    }
}

答:输出 c 和 100。

对于第一个输出来说,char 在 java 中称为字符型,占 2 个字节,而字符常量是用单引号括起的一个字符,而且字符常量在内存中存储的是该字符在 Unicode 字符集中的排序位置(即这里的排序位置为 98,可以 javap 看),所以对于 char n = 'b' 来说就是 char n = 98,而 System.out.println(++n) 语句会先执行 ++n,所以为 99,然后输出对应位置的字符,即 c。

对于第二个输出来说,Java 中存在向上兼容的特点(不同类型数据参与运算数据类型会强制转换,转换的方向是 char -> short -> int -> long -> float -> double),所以在 System.out.println(n+1) 语句中,n 是 char 类型,1 是 int 类型,所以会先把 n 强转成 int,然后运算 99 + 1,所以输出也是 int 类型的 100。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 问:java char 能否存储一个汉字,为什么? 答:char 类型一般默认占用两个字节,所以能存储中文字符(一...
    Little丶Jerry阅读 530评论 0 0
  • 概述 java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。java.io ...
    Steven1997阅读 9,458评论 1 25
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,592评论 0 4
  • 《夏目友人帐》中说:我必须承认,生命中大部分时光是属于孤独的,努力成长是在孤独里可以进行的最好的游戏。 不...
    陌玉诗羽阅读 302评论 0 0
  • cin.putback(' ');//cin 是去输入缓存拿东西,如果没有就等待输入,putback就是往输入缓存...
    当时光一去不复返时阅读 369评论 0 0

友情链接更多精彩内容