基本数据类型
- 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);
}
运行结果:

注意:
- 浮点数默认为double类型,带后缀F的为float类型,float在存储大型浮点数时可以节省内存空间;例:1.23、1.23d为double类型,1.23为double类型。
- 整型数据默认为int类型,如果一个整数的值超出了int的表示范围,可以用long类型表示,例子: long a = 100000L,Long b =-200000L。"L"理论上不分大小写,但是若写成"l"容易与数字"1"混淆,不容易分辩。所以最好大写.
- 为什么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,需要两个字节。
- 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。
本文介绍了Java中的基本数据类型,如byte、int、float等的位数和字节数,并探讨了字符编码,如ASCII、Unicode及UTF-8的区别。特别提到Java中的char类型为2字节,因它采用Unicode编码,能表示更多字符。
1932

被折叠的 条评论
为什么被折叠?



