数据类型
Java的数据类型分为两大类:
- 基本数据类型:包括 整数 、 浮点数 、 字符 、 布尔 。
- 引用数据类型:包括 类 、 数组 、 接口 。
四类八种基本数据类型:
变量
常量是固定不变的数据,那么在程序中可以变化的量称为变量。
程序中,可以使用字母保存数字的方式进行运算,提高计算能力,可以解决更多的问题。比如x保存5,x也可以保存6,这样x保存的数据是可以改变的,也就是我们所讲解的变量。
Java中要求一个变量每次只能保存一个数据,必须要明确保存的数据类型。不同的变量类型,占用的字节数不同,取值范围就不同,使用的场景也就不同。
变量的定义
变量定义的格式包括三个要素: 数据类型 、 变量名 、 数据值 。
格式一:声明变量并赋值
//数据类型 变量名 = 数据值;
int age = 18;
//输出变量名中保存的值
System.out.println(age);//18
格式二:
先声明,后赋值(使用前赋值即可)
//数据类型 变量名;
double money;
// 变量名 = 初始化值;
money = 55.5;
System.out.println(money);//55.5
格式三:在同一行定义多个同一种数据类型的变量,中间使用逗号隔开。但不建议使用这种方式,降低程序的可读性。
// 定义int类型的变量a和b,中间使用逗号隔开
int a = 10, b = 20;
System.out.println(a);//10
System.out.println(b);//20
// 声明int类型的变量c和d,中间使用逗号隔开
int c, d;
//分别给 c , d 变量赋值
c = 30;
d = 40;
System.out.println(c);//30
System.out.println(d);//40
变量的理解:
- 变量的本质就是内存中的一块空间,空间的大小由数据类型决定
- 要想找到变量对应的内存空间的数据,需要给变量对应的内存空间起个名字,叫做变量名称
- 变量对应的内存空间中必须有数据才能使用,这种向变量内存空间中,存储数据的过程叫做初始化或者赋值
定义所有基本数据类型的变量,代码如下
public class Demo {
public static void main(String[] args) {
//定义字节型变量
byte b = 100;
System.out.println(b);
//定义短整型变量
short s = 1000;
System.out.println(s);
//定义整型变量
int i = 123456;
System.out.println(i);
//定义长整型变量
long l = 12345678900L;
System.out.println(l);
//定义单精度浮点型变量
float f = 5.5F;
System.out.println(f);
//定义双精度浮点型变量
double d = 8.5;
System.out.println(d);
//定义布尔型变量
boolean bool = false;
System.out.println(bool);
//定义字符型变量
char c = 'A';
System.out.println(c);
}
}
注意事项
- 变量名称:在同一个大括号范围内,变量的名字不可以相同。
- 变量赋值:定义的变量,不赋值不能使用。
- 定义long类型的变量时,需要在整数的后面加L(大小写均可,建议大写)。因为整数默认是int类型,整 数太大可能超出int范围。
- 定义float类型的变量时,需要在小数的后面加F(大小写均可,建议大写)。因为浮点数的默认类型是 double, double的取值范围是大于flfloat的,类型不兼容。
标识符
标识符:是指在程序中,我们自己定义内容。比如类的名字、方法的名字和变量的名字等等,都是标识符。 HelloWorld案例中,出现的标识符有类名字 HelloWorld 。
命名规则: 硬 性 要 求
- 标识符可以包含 英文字母26个(区分大小写) 、 0-9数字 、 $(美元符号) 和 _(下划线) 。
- 标识符不能以数字开头。
- 标识符不能是关键字
命名规范: 软 性 建 议
- 类名的规范:首字母大写,后面每个单词首字母大写(大驼峰式)。 例如:MethodDefine
- 方法名规范:首字母小写,后面每个单词首字母大写(小驼峰式)。
- 变量名规范:首字母小写,后面每个单词首字母大写(小驼峰式)。例如:maxValue
数据类型转换
Java程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换。
自动类型转换
概念:将 取值范围小的类型 自动提升为 取值范围大的类型 。例如:一个 int 类型变量和一个 byte 类型变量进行加法运算,运算结果,变量的类型将是 int 类型,这就是出现了数据类型的自动类型转换现象。
public class Demo {
public static void main(String[] args) {
int i = 1;
byte b = 2;
/*
b是byte类型,i是int类型,运算时类型不一致,会发生自动类型转换
byte类型(1个字节)的b会自动转换成int类型(4个字节):在byte类型的b左侧补充3个字节的0
最终变成了两个int数据相加,结果是int类型(占用4个字节),可以直接赋值给左侧的int类型的变量y,占用4个字节
*/
int y = b + i;
System.out.println(y);//3
}
}
特点:
- 自动类型转换是自动完成的,不需要代码的干预
-
范围小的类型向范围大的类型提升, byte 、 short 、 char 运算时直接提升为 int
强制类型转换
概念:
将
取值范围大的类型
强制转换成 取值范围小的类型。例如:将 1.5 直接 赋值到
int 类型变量会发生什么?产生编译失败,肯定无法赋值。double
类型内存
8
个字节,
int
类型内存
4
个字节。
1.5
是
double
类型,取值范围大于
int 。想要赋值成功,只有通过强制类型转换,将
double
类型强制转换成
int
类型才能赋值。
特点:
- 自动转换是Java自动执行的,而强制转换需要我们自己手动执行。
- 转换格式:数据类型 变量名 = (数据类型)被转数据值;
public class Demo {
public static void main(String[] args) {
//short类型变量,内存中2个字节
short s = 1;
/*
出现编译失败 s和1做运算的时候,1是int类型,s会被提升为int类型
s+1后的结果是int类型,将结果在赋值会short类型时发生错误
short内存2个字节,int类型4个字节 必须将int强制转成short才能完成赋值
s = s + 1;编译失败
*/
s = (short) (s + 1);//编译成功
}
}
注意事项:
强制类型转换有可能造成精度损失和数据溢出,最好少用
public class Demo {
public static void main(String[] args) {
double d = 1.5;
/*
左侧d是double类型(占8个字节),右侧的int类型的变量x(占4个字节)
double数据是不能直接赋值给int变量的
进行了强制类型转换,把double数据强制转换成int数据
double强制类型转换成int: 直接把小数部分干掉,会损失精度
*/
int y = (int) d;
System.out.println(y);//1
//数据溢出
int a = 1234567;
byte b = (byte) a;
System.out.println(b);//-121
}
}