美文网首页
[转载]Java char 与 byte

[转载]Java char 与 byte

作者: caoxinyiyi | 来源:发表于2018-06-27 17:44 被阅读12次

转载自 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。

相关文章

网友评论

      本文标题:[转载]Java char 与 byte

      本文链接:https://www.haomeiwen.com/subject/auriyftx.html