目标:
1.对各种数据类型有一个更加清晰的概念
一、boolean类型:只能是true或false
位置 boolean类型变量取值
====================================================================
Java源程序 只能是true或false
class文件 用int或byte表示boolean 0 非0
虚拟机中 用整数0来表示false, 有任意一个非零整数表示true
强调,在Java源程序中不允许把整数或null赋给boolean类型的变量,
这是有别于其它语言(如c语言)的地方. 例:
boolean isMarried = 0; //编译出错,提示类型不匹配
boolean isMarried = null; //编译出错,提示类型不匹配
二、char类型:本质是一个无符号的整数
1.Java语言采用UCS-2字符编码,字符占2个字节(1个字节8位),一个数字对应一个字符。字符本质是一个整数,可以进行+,-运算,会先转换为int类型
字符a的二进制数据形式为 0000 0000 0110 0001
十六进制数据形式为 0x0061
十进制数据形式为 97
所以: 以下4种赋值方式是等价的:
char c = 'a';
char c = '\u0061'; //设定"a"的十六进制数据的Unicode字符编码
char c = 0x0061; //设定"a"的十六进制数据的Unicode字符编码
char c = 97; //设定"a"的十进制数据的Unicode字符编码
2.转义字符
1.原因: Java编程人员在给字符变量赋值时,通常直接从键盘输入特定的字符,而不会使用Unicode字符编码,因为很难记住各种字符的Unicode字符编码值。
对于有些特殊字符,比如单引号,如不知道它的Unicode字符编码,直接从键盘输入编译错误:
char c = '''; //编码出错
为了解决这个问题,可采用转义字符来表示单引号和其他特殊字符:
简而言之:无法直接用字符表示,书写到源文件中。用转义字符来代替这些特殊字符。
2.规则:转义字符以反斜杠开头
3.常用转义字符:
\n 换行符,将光标定位到下一行的开头;
\t 垂直制表符,将光标移到下一个制表符的位置;
\\ 反斜杠字符
\' 单引号字符
三、整数类型
1.分类:
byte, short, int和long都是整数类型,并且都是有符号整数。
char为无符号整数。
2.区别:在于把二进制数转换为十进制整数的方式不一样。
有符号整数把二进制数的首位作为符号数,当首位是0时,对应十进制的正整数,当首位是1时,对应十进制的负整数。
无符号整数没有所谓的符号位,都是正数或0
3.表示方式:
在Java语言中,为了区分不同进制的数据,二进制以"0b"开头八进制数以“0”开头,十六制以“0x”开头。
如:
int a0 = 0b11
int a1 = 012; //012为八进制数,变量a1的十进制取值为10
int a2 = 0x12; //0x12为十六进制数,变量a2的十进制取值为18
int a3 = 12; //12为十进制数,变量a3的十进制取值为12
注意:后面的数值不能大于其进制数,
二进制不能超过1,八进制不能超过7,十六进制不能超过F,否则报错
可以调用以下方法转换
二进制转十进制
Integer.valueOf("0101",2).toString()
另外还有
十进制转成十六进制:
Integer.toHexString(int i)
十进制转成八进制
Integer.toOctalString(int i)
十进制转成二进制
Integer.toBinaryString(int i)
十六进制转成十进制
Integer.valueOf("FFFF",16).toString()
八进制转成十进制
Integer.valueOf("876",8).toString()
4.注意点:
long类型后面要加上l或L
赋值byte,short,int类型时不能超过对应的范围
四、浮点类型
1.浮点类型表示有小数部分的数字。
2.两种浮点类型:
loat: 占4个字节,共32位,称为单精度浮点数;
double: 占8个字节,共64位,称为双精度浮点数;
3. 双精度比单精度表示的位数大精确的位数多,
简单地说, float表示的小数点位数少,double能表示的小数点位数多!
4.在默认情况下,如果直接构建带有小数的数字(或十进制科学计数法表示的数字),
表示的是double类型,可以把它直接赋值给double类型变量。
5.代码:
float f1 = 1.0 //编译错误,必须进行强制类型转换;
float f2 = 1; //合法,把整数1赋值给f2,f2的取值1.0;
float f3 = (float)1.0; //合法,f3的取值为1.0;
float f4 = (float)1.5E+55; //合法, 1.5E+55超出了float类型的取值范围, f4的取值为正无穷大
System.out.println(f3); //打印1.0;
System.out.println(f4); //打印Infinity
六、字符编码
Java语言对文本字符采用Unicode字符编码。由于计算机内存只能存取二进制数据,因此必须为各个字符进行编码。
所谓字符编码,是指用一串二进制数据来表示特定的字符。常见的字符编码包括:
a. ASCII字符编码
ASCII--Amecian Standard Code for Information Interchange(美国信息交换标准代码). 主用于表达现代英语
和其他西欧语言中的字符。它是现今最通用的单字节编码系统,它只用一个字节的7位,一共表示128个字符。
b. ISO-8859-1字符编码
又称为Latin-1, 是国际标准化组织(ISO)为西欧语言中的字符制定的编码,用一个字节(8位)来为字符编码,与
ASCII字符编码兼容。所谓兼容,是指对于相同的字符,它的ASCII字符编码和ISO-8859-1字符编码相同。
c. GB2312字符编码
它包括对简体中文字符的编码,一共收录了7445个字符(6763个汉字+682个其他字符. 它与ASCII字符编码兼容。
d. GBK字符编码 windows系统
对GB2312字符编码的扩展,收录了21886个字符(21003个字符+其它字符), 它与GB2312字符编码兼容。
e. Unicode字符编码:
由国际Unicode协会编制,收录了全世界所有语言文字中的字符,是一种跨平台的字符编码。
UCS(Universal Character Set)是指采用Unicode字符编码的通用字符集。
Unicode具有两种编码方案:
. 用2个字节(16位)编码,被称为UCS-2, Java语言采用;
. 用4个字节(32位)编码,被称为UCS-4;
f. UTF字符编码 unix操作系统使用
有些操作系统不完全支持16位或32位的Unicode字符编码,UTF(UCS Transformation Format)字符编码能够把
Unicode字符编码转换为操作系统支持的编码,常见的UTF字符编码包括UTF-8, UTF-7和UTF-16.