在Java中,数据类型基本分为俩类:基本数据类型和引用数据类型。
基本数据类型分为四类八种:
特别说明:每种基本数据类型都有其对应的包装类,即:
包装类的出现是因为:Java是一个面向对象的编程语言,但是他的八种数据类型却不是面向对象的,为了使用方便和解决这个不足,在设计类时都为每个基本数据类型设计了一个类进行代表。
包装类的用途,主要有俩个:
1.作为和基本数据类型对应的类 类型存在,方便设计到对象的操作。
2.包含每种数据类型的相关属性,如最大值、最小值以及相关操作方法等。
注:
1.不管是在32位系统还是在64位系统,int都占4个字节,long都占8个字节
2.整形和浮点型都是带有符号的
3.整形默认为int 浮点型默认为double
引用数据类型包括:String类、接口、枚举等。
字面常量的分类:
1.字符常量:由单引号引起来的单个字符,如:’A‘,’8‘
2.字符串常量:有“ ”引起来的,比如“hello”、“123456”等。
3.整形常量:程序中直接写的数字(没有小数点),如10、1000
4.浮点数常量:程序中直接写的小数,如3.14、9.99
5.布尔常量:只有两种:true(真)、false(假)
6.空常量:null
在程序中,除了有始终不变的常量外,有些内容可能会经常改变,比如:人的年龄、身高、成绩分数、数学函数的计算结果等,对于这些经常改变的内容,在Java程序中,称为变量。而数据类型就是用来定义不同种类变量的。
定义变量的语法格式为:数据类型 变量名 = 初始值;
1.整型变量
1.1 定义整型变量
//方式一:在定义时给出初始值
int a = 10;
//方式二: 在定义时没有初始值 但是在使用前必须赋值
int b;
b = 10;
注:
1.int不管在什么系统下都是4字节
2.在给int变量设置初始值的时候,不能超过int的表示范围
1.2 定义长整型变量
//方式一:直接定义
long a = 10;
//方式二:在数值后加标识 与int类型的变量进行区分
long b = 10L;
long c = 10l;
注:
- long不管在什么系统下都是8字节
- long变量的初始值后加L或者l 推荐加L
1.3 定义短整型
short a = 10;
注:
1.short不管在什么系统下都是2字节
2.使用时不要超过short能表示的范围(使用较少)
1.4 定义字节型变量
byte a = 10;
注:
- byte不管在什么系统下都是1字节
- byte的范围是:-128 ~ 127
2.浮点型变量
2.1 定义单精度浮点型
float a = 0.1f;
float b = 0.1F;
//输出结果 0.1
注:
- float变量的初始值后加f或者F 推荐加f
- float表示的精度范围较小,因此一般用到浮点数都会使用double
2.2 定义双精度浮点型
double a = 1.1;
System.out.println(a*a);
//输出的结果是 1.21?
//输出结果:1.2100000000000002
注:
- 浮点数与整数在内存中的存储规则不同,不能单纯使用2^n来计算
- double类型的内存布局遵守IEEE 754标准(准确定义了单精度和双精度浮点格式),要求在有限的内存空间内表示可能无限的小数,势必会存在一定的精度误差,因此浮点数是个近似值,并不是准确值。
3.字符型变量
char a = 'A';
char b = 'a';
char c = '1';
char d = '啊';
注: 计算机中字符本质上是一个整数。在C语言中使用ASCII表示字符 而在Java中用Unicode表示字符
4.布尔类型变量
boolean a = true;
boolean b = false;
注:
- boolean类型的变量只有俩种取值,true表示真 false表示假
- Java的boolean类型和int不能转换,不存在1表示真、0表示假这样的用法
Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验。当参与运算数据类型不一致时,就会进行类型转换。Java中类型转换主要分为两类:自动类型转换(隐式) 和 强制类型转换(显式)。
自动类型转换:代码不需要经过任何处理,编译器会自动进行处理。
特点:数据范围小的类型转为数据范围大的类型时会自动进行。
//示例一:
int a = 10;
long b = 10L;
b = a; //a的范围小 b的范围大 先将a的类型转换为long 然后进行赋值
a = b //a的范围小 b的范围大 将大数存储在小的内存空间会有数据丢失 不安全
//示例二:
float a = 3.14f;
double b = 3.14;
b = a; //a的范围小 b的范围大 先将a的类型转换为double 然后进行赋值
a = b; //a的范围小 b的范围大 将大数存储在小的内存空间会有数据丢失 不安全
强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成。
特点:数据范围大的到数据范围小的。
int a = 10;
long b = 100L;
b = a; // int-->long,数据范围由小到大,隐式转换
a = (int)b; // long-->int, 数据范围由大到小,需要强转 否则编译失败
注:
- 不同的数字类型的变量之间赋值,表示范围较小的类型能隐式转换成表示范围较大的类型
- 如果需要把表示范围较大的类型转换成表示范围较小的类型,需要强制类型转换 但是可能会丢失数据、丢失精度;
- 强制类型转换不一定能成功,不相干的类型不能互相转换。
不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的。
int a = 10;
long b = 20;
int c = a + b; // 编译出错: a + b -->int + long--> long + long 赋值给int时会丢失数据
long d = a + b; // 编译成功: a + b --> int + long--->long + long 赋值给long
注:
- 不同类型的数据混合运算,范围小的会提升为范围大的
- 对于short、byte这种比4个字节小的类型,会先提升为4个字节的int 再参与运算
在Java中使用String类定义字符串类型。(在这里做简单介绍,后面详细介绍)
String s1 = "hello";
String s2 = "world";
常用的三个字符串操作:
//一.字符串拼接
String s3 = s1 + s2;
//二.将int转为String
int num = 10;
String s1 = String.valueOf(num);
//三. 将String转为int
String s1 = "10";
int a = Integer.parseInt(s1);