数据类型、变量和常量以及拆包和装包
一、数据类型
Java数据类型分为基本类型(primitive types)和引用类型(reference type),其中基本类型又分为数值型、字符型、布尔型。引用类型又分为类类型、接口类型、数组类型、null类型。这两种大的类型包含了int,double,char,等许多。其关系如下图:
其中:
- byte字节型1字节 8bit 最大存储数据量是255,存放的数据范围是-128~127之间。
- short短整型2字节 16bit最大数据存储量是65536,数据范围是-32768~32767之间。
- int整型4字节 32bit最大数据存储容量是2的32次方减1,数据范围是负的2的31次方到正的2的31次方减1。
- long长整型8字节 64bit最大数据存储容量是2的64次方减1,数据范围为负的2的63次方到正的2的63次方减1 。
- 浮点型float单精度4字节 32bit数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。 如float=2.5f;
- double双精度8字节 64bit数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加 。
- char字符型用单引号 。
- 布尔类型 boolean 布尔型true/false(只有真假两种结果)。
简单类型一般适合存储少量数据,可以实现高效率处理。
引用类型的变量在堆栈(Stack)中存储对数据(对象)的引用(地址),数据(对象)存储在堆(Heap)中。对于引用类型,两个变量可以引用同一个对象,因此对一个变量的操作可能影响另一个变量所引用的对象。
Java基本数据类型的相互转化:
- 自动类型转换:容量小的数据类型可以自动转化为容量大的数据类型
int–>float,long–>float,long–>double在转换时可能会出现精度的损失,而箭头方向表示无数据丢失的自动类型转换。
二、变量和常量
变量: 变量表示存储位置,每个变量必须具有一个类型。
变量的声明和赋值: 在方法内部声明的变量,称为"局部变量"。在类内部(但不在该类内部的任何方法中)声明的变量,称为"成员变量",即类的字段。
局部变量的声明和赋值格式如下:
(1)声明变量:
数据类型 变量名[,变量名…];
数据类型 变量名=初值[, 变量名=初值…];
(2)变量赋值:
变量=要赋的值;
注: 一行代码可以同时声明多个同类型的变量,以半角符号(,)分隔。在声明变量的同时,可以赋初值。
Java局部变量被访问之前必须初始化,否则编译时会报错。因为,不可能访问一个未初始化的变量。
例如:
代码如下:
public static void main(String[] args) {
int i1;
i1=123;
int i2=456;
double d1=12.3,d2,d3=45.6;
System.out.println("i1="+i1); //输出i1;
System.out.println("i2="+i2); //输出i2;
System.out.println("d1="+d1); //输出d1;
//System.out.println("d2="+d2); //编译错误:变量d2被访问之前没有赋值
System.out.println("d3="+d3); //输出d3;
}
运行结果如下:
变量的作用域:
变量声明的位置不同,其可被访问的范围也不同。变量的可被访问范围称为变量的作用域。Java语言中的变量按其作用域大致可以分为类型成员变量、方法体局部变量(包括方法参数)、语句块局部变量。
- 类型成员变量:类型成员变量实在类类型中声明的变量,包括静态变量和实例变量,其有效范围(作用域)为类类型定义体内
- 方法体局部变量:方法体局部变量是方法中声明的变量,其有效范围(作用域)为方法体内。方法所带的参数也属于过程级局部变量,其有效范围(作用域)为方法体内
- 语句块局部变量:语句块局部变量实在控制结构块中声明的变量。例如,if、for等语句中定义的变量,其有效范围(作用域)为控制结构块内
常量:
(1)文本常量: 代码中出现的文本形式常数,即文本常量,通常用来表示简单类型、String类型和null类型的值
(2)整型常量: 整型字符串通常解释为int类型。如果加后缀L(大写字母L,也可使用小写字母l,但小写字母l容易与数字1混淆,故不建议使用),则解释为long类型。例如:
int int1 = 123; //整型变量123为int型
long long1=123L; //整型变量123L为long型
编译器通常将整数解释为十进制(基数为10)数制,可以用前缀0x(或0X)将整数强制为十六进制(基数为16)数制,或使用前缀0(数字0)将整数强制为八进制(基数为8),如图表2-3所示。注意,跟在前缀后面的数字必须符合数制。
数制 | 前缀 | 有效数值 | 示例 |
---|---|---|---|
十进制(以10为基数) | 0~9 | 0、1、2、7、8、10、11 | |
十六进制(基数为16) | 0x(或0X) | 0 ~9、A ~F或0 ~9和a ~f | 0x0、0x1、0x2、0x7 |
八进制(基数为8) | 0 | 0 ~7 | 00、01、02、03、010 |
(3)浮点数类型常量: 浮点数只能表示十进制数。浮点数有两种表示方法,即标准表示法和科学记数法。浮点数又分为单精度数和双精度数。
(4)布尔类型常量: 布尔类型常量分别为true和false。布尔类型常量可以赋值给布尔类型变量。例如:
boolean b1 = true;
(5)字符类型常量: Java字符常量在单引号内包含所需的字符,例如’a’、‘A’。
(6)字符串类型常量: Java的字符串常量是用双引号(" “)括起来的一串字符。如"Hello,World”
String str1="程序设计";
String str2="Hello World";
(7)用户声明常量: 在方法内部声明的常量,称为"局部常量";在类(但不在该类内部的任何方法中)中声明的常量,称为"成员变量",“常量字段”。
局部变量的声明和赋值格式如下:
final 类型 局部变量名[=初值];
注意: 指定其值后,不能再对其进行赋值修改,否则会产生编译错误。
三、拆包和装包
(1)装包: 即简单类型=》包装类
(2)拆包:即包装类=》简单类型
以下为类型的转换:
简单类型 | 包装类 |
---|---|
int | Integer |
byte | Byte |
char | Character |
short | Short |
boolean | Boolean |
float | Float |
double | Double |
long | Long |
通过装包和拆包操作机制,可以实现简单类型和引用类型之间的转换。