java中的8种基本的数据类型,以及Java中的字符编码集

本文介绍了Java中的基本数据类型,如byte、int、float等的位数和字节数,并探讨了字符编码,如ASCII、Unicode及UTF-8的区别。特别提到Java中的char类型为2字节,因它采用Unicode编码,能表示更多字符。

基本数据类型

  • byte
    1(字节)
  • short
    2(字节)
  • int
    4(字节)
  • long
    8(字节)
  • float
    4(字节)
  • double
    8(字节)
  • char
    2(字节)
  • boolean
 @org.junit.Test
    public void test(){
        System.out.println("byte所占位数:" + Byte.SIZE);
        System.out.println("byte所占字节数:" + Byte.SIZE/8);
        System.out.println("int所占位数:" + Integer.SIZE);
        System.out.println("int所占字节数:" + Integer.SIZE/8);
        System.out.println("short所占位数:" + Short.SIZE);
        System.out.println("short所占字节数:" + Short.SIZE/8);
        System.out.println("float所占位数:" + Float.SIZE);
        System.out.println("float所占字节数:" + Float.SIZE/8);
        System.out.println("double所占位数:"+ Double.SIZE);
        System.out.println("double所占字节数:" + Double.SIZE/8);
        System.out.println("char所占位数:" + Character.SIZE);
        System.out.println("char所占字节数:" + Character.SIZE/8);
        System.out.println("long所占位数:" + Long.SIZE);
        System.out.println("long所占字节数:" + Long.SIZE/8);
    }

运行结果:
在这里插入图片描述

注意:

  1. 浮点数默认为double类型,带后缀F的为float类型,float在存储大型浮点数时可以节省内存空间;例:1.23、1.23d为double类型,1.23为double类型。
  2. 整型数据默认为int类型,如果一个整数的值超出了int的表示范围,可以用long类型表示,例子: long a = 100000L,Long b =-200000L。"L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写.
  3. 为什么char类型在Java中占2byte,在其他语言中占1byte呢?
  • 因为Java是Unicode编码,在Unicode编码中 1char == 2byte
  • 上世纪60年代,美国制定了一套英文字符与二进制位的对应关系,称为ASCII码,沿用至今。ASCII码规定了128个英文字符与二进制的对应关系,占用一个字节(实际上只占用了一个字节的后面7位,最前面1位统一规定为0)
  • ASCII编码只占用1个字节,也就是说最多只能表示256个字符。那么数万汉字怎么表示?日语韩语拉丁语等等象形文字又该怎么表示?所以90年代又制定了一套新的规范,将全世界范围内的字符统一使用一种方式在计算机中表示,这就是Unicode编码。Unicode 规定可以使用多个字节表示一个字符,例如 a 的编码为 01100001,一个字节就够了,”好“的编码为 01011001 01111101,需要两个字节。
  1. Boolean占多少字节?
  • java规范中,没有明确指出boolean的大小.
  • 在《Java虚拟机规范》一书中的描述:" 大部分指令都没有支持整数类型byte、char和short,甚至没有任何指令 支持boolean类型。编译器会在编译期或运行期将byte和short类型的数据带符号扩展(Sign-Extend)为 相应的int类型数据,将boolean和char类型数据零位扩展(Zero-Extend)为相应的int类型数据。与之类 似,在处理boolean、byte、short和char类型的数组时,也会转换为使用对应的int类型的字节码指令来 处理。因此,大多数对于boolean、byte、short和char类型数据的操作,实际上都是使用相应的对int类 型作为运算类型(Computational Type)来进行的。"
  • 还说了:" 如果读者希望了解更详细的信息,可以阅读由Oracle官方授 权、由笔者翻译的《Java虚拟机规范(Java SE 7)》中文版(字节码的介绍可见此书第6章)。"

多种字符编码集

字符集:

  • ASCII:美国的标准信息交换码。
    用一个 字节的7位可以表示。
  • ISO8859-1:拉丁码表,欧洲码表。
    用一个字节的8位表示。
  • GB2313:中国的中文编码表,最多两个字节编码所有字符。
  • GBK:中国的中文编码表升级,融合了更多的中文文字符号,最多两个字节编码。
  • Unicode:国际标准码,融合了目前人类使用的所有字符,为每个字符分配唯一的字符码。所有的文字都用两个字节表示。
  • UTF-8:变长的编码格式,可用1-4个字节来表示一个字符。

Unicode编码的问题

  • 我们已经知道英文字母用一个字节表示就足够了,我们怎么知道两个字节表示一个符号,而不是分别表示两个符号呢?

    以UTF-8为例:在Unicode符号范围的基础上使用特定的编码格式,来决定用多少个字节表示一个符号。
    具体了解的话推荐去康师傅讲Java

UTF:

  • 随着互联网的出现,面向传输的众多UTF(UCS Transfer Format)标准出现了。顾名思义,UTF-8就是每次8个位传输数据,而UTF-16就是每次16个位。
  • Unicode只定义了一个庞大的,全球通用的字符集,并为每个字符规定了唯一确定的编号,具体存储成什么样的字节流,取决于字符编码方案。推荐的Unicode编码是UTF-8和UTF-16。
  • 在标准的UTF-8编码中,超出基本多语言范围(BMP-Basic Multilingual Plane)的字符被编码为4字节格式,但是在修正的UTF-8编码中,他们由代理编码对表示,然后这些代理编码对在序列中分别重新编码。结果标准的UTF-8需要4字节的字符,在修正后的UTF-8中将需要6个字节。

ANSI编码,通常指的是平台的默认编码,例如英文操作系统中是ISO-8859-1,中文系统中是GBK。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小黑cc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值