重学Java-第五章 Java数据类型
5.1 概述
Java语言的数据类型可以分为基本数据类型(primitive data type)和引用型数据类型(reference data type)
5.2 基本数据类型
5.2.1 整数类型
Java语言提供了4种整数类型,分别为byte型(字节型)、short型(短整型)、int型(整型)和long型(长整型)。这些整数类型都是有符号数,可以为正值或负值。每种类型的整数在内存中占的位数不同,因此能够表示的数的范围也就不同。
注意:不要把整数类型的宽度理解成实际机器的存储空间,一个byte型的整数可能使用32位存储。
数据类型 | 占字节数 | 所占位数 | 取值范围 |
---|---|---|---|
byte | 1 | 8 | -128~127 (-2^7 ~ 2^7-1) |
short | 2 | 16 | -32768~32767 (-2^15 ~ 2^15-1) |
int | 4 | 32 | -2147483648~2147483647 (-2^31 ~ 2^31-1) |
long | 8 | 64 | -2^63 ~ 2^36-1 |
Java的整型字面量有4种表达方式:
-
十进制数,如0、32、-542。
-
二进制数,是以0b或0B开头的数,如0B00101010表示十进制数42。
-
八进制数,是以0开头的数,如0124表示十进制数84,-012表示十进制数-10。
-
十六进制数,是以0x或0X开头的整数,如0x124表示十进制数292。
注意:整型字面值具有int类型,在内存中占32位,若要表示long型字面值,可以在后面加上l或L,若23423431L,在内存中占64位。
Java中这几个整型变量的定义
byte num1 = 12;
short num2 = 100;
int num3 = 99999;
long num4 = 45252352352L; //超出int型范围的必须使用L表示
//注意下面代码的输出
byte a = 0b00101010; //二进制数
int b = 0124; //八进制数
long c = 0x1F; //十六进制数
System.out.println("a = " + a); //42
System.out.println("b = " + b); //84
System.out.println("c = " + c); //31
5.2.2 浮点类型
浮点类型的数就是通常说的小数。Java中有两种浮点类型的数据:float型和double型。这两种类型的数据在内存中所占的位数不同,float型占32位(4字节),double型占64位(8字节)。因此,通常将float型称为单精度浮点型,将double型称为双精度浮点型。
浮点型字面值有两种表示方式:
- 十进制形式,由数字和小数点组成,且必须有小数点,如3.14159、.256、256.、256.0等。
- 科学计数法形式,如256e3、256e-3,分别表示256*103和256*10-3。e之前必须有数字,e后面的指数必须为整数。
Java中两个浮点型变量的定义:
double d = .000000103;
float f = 3.1415926F; //float型的值必须加f或F
System.out.println("d = " + d); //1.03E-7
System.out.println("f = " + f); //3.1415925
5.2.3 字符类型
字符是程序中可以出现的任何单个符号。字符在计算机内部是由一组0和1的序列表示的。将字符转化为其二进制表示的过程称为编码。字符型字面值用单引号将字符括起来,大多数可见的字符都可以使用这种方式表示,如'a'、'我'等。对于不能用单引号直接括起来的符号,需要使用转义序列来表示。表示方法使用反斜杠(\)表示转义,如'\n'表示换行、'\t'表示水平制表符。
常见的转义字符序列
转义字符 | 说明 |
---|---|
\' | 单引号字符 |
\" | 双引号字符 |
\\ | 反斜杠字符 |
\f | 换页 |
\b | 退格 |
\r | 回车 |
\n | 换行 |
\t | 水平制表符 |
字符型变量使用char定义,在内存中占16位,表示的数据是0~65535。字符型变量的定义如: char c = 'A';
5.2.4 布尔类型
布尔型数据用来表示逻辑真或逻辑假。布尔型常量很简单,只有两个值:true和false(默认值),分别用来表示逻辑真和逻辑假。
布尔型变量使用boolean关键字声明,例如:boolean t = true;
5.2.5 数据类型转换
==boolean类型不可以转换为其他类型==
==byte, short, char 三种类型间不会相互转换,他们三者在计算时,首先会转换为int类型==
数据类型按容量大小排序为:
byte, short, char < int < long <float < double
Java基本类型之间的转换有两种方式:
- 自动类型转换:从小类型到大类型,不需要强制转换符
int a = 5;
double b = a;
//此处将int类型变量a的值赋值给double类型变量b,因为是小类型转换成大类型,int类型变量a的值会自动转换成double类型并赋值给变量b
- 强制类型转换:从大类型到小类型,需要强制转换符实现强制转换(强转有可能产生精度丢失)
强制转换符:(需要转换成的类型)变量
double a = 5.234;
int b = (int)a;
//此处将double类型变量a的值赋值给int类型变量b,因为是大类型转换成小类型,需要强制转换符先将double类型变量a的值转换成int类型再赋值给int类型变量b
关于byte、short、char赋值与运算的强转规则:
- 不参与运算,整数直接量可以直接赋值给byte,short,char,不需要强转。
- byte,short,char型变量参与运算时,需要强转
byte b1 = 2;
byte b2 = 4;
byte b3 = (byte)(b1 + b2);
//b1与b2不参与运算,整数直接量可以直接赋值给byte;参与运算后,b1+b2和的值默认为int类型,需要强制转换成byte类型再赋值给byte类型变量b3
5.3 引用数据类型
引用数据类型有类(class)、数组[]name、接口(interface)、枚举类型(enum)、注解类型(@interface)等。
注意:String类型是一个类,并不是基本数据类型。