(一)数据类型
Java中,数据类型主要分为两大类:基本数据类型和引用数据类型。
基本数据类型:
分为四类八种,所谓四类是整型、浮点型、字符型、布尔型。八种是字节型、短整型、整型、长整型、单精度浮点型、双精度浮点型、字符型、布尔型。
用表格可视化基本数据类型如下:
数据类型(四类) | 数据类型(八种) | 关键字 | 所占内存(字节) | 取值范围 |
整型 | 字节型 | byte | 1 | -128 ~ 127 |
整型 | 短整型 | short | 2 | -32768 ~ 32767(-2^15 ~ 2^15-1) |
整型 | 整型 | int | 4 | -2^31 ~ 2^31-1 |
整型 | 长整型 | long | 8 | -2^63 ~ 2^63-1 |
浮点型 | 单精度浮点型 | float | 4 | 有范围,一般不关注 |
浮点型 | 双精度浮点型 | double | 8 | 有范围,一般不关注 |
字符型 | 字符型 | char | 2 | 0 ~ 65535(0 ~ 2^16-1) |
布尔型 | 布尔型 | boolean | 没有明确规定 | true 和 false |
注意:
1.在Java中,不论何种系统,int永远占4个字节,long永远占8个字节。(与C语言区分)
2.整型和浮点型带符号,即有正负;字符型只有正没有负。
3.整型默认为int型,浮点型默认为double型。
引用数据类型:
有类、数组、接口、枚举类型、字符串类型等等。
(二)变量
定义:
在Java中,变量是存储数据值的基本单元,用于在程序中保存和操作数据。通俗地说,在程序中,把经常改变的量称为变量。比如:人的年龄、成绩、函数的计算结果等等。
语法格式:
数据类型 变量名 = 初始值;
注意:
1. "="(赋值号)左边称为左值,代表对象或在内存中开辟的空间,右边称为右值,代表具体的值。
例如:
int age = 25; // 整型变量
String name = "Alice"; // 字符串变量
boolean isStudent; // 未初始化的布尔变量(默认值 false)
2.关于变量初始化:
① 变量在声明时可选择是否初始化。但是一般在声明变量时会赋初值,养成良好的代码习惯。
② Java局部变量一定要赋初值,否则编译不通过。在IDEA中,则直接报错,如下图所示。
3.在一行中,可以定义多个相同类型的变量,中间用“,”隔开。
例如:
int number = 100, score = 90,a1 = 10;
4. 变量三要素:
数据类型:决定变量存储的数据的种类。
变量名:需遵循标识符的命名规则。
初始值:变量存储的具体值。除了final变量(也称常量),其他变量可通过赋值修改。
(final变量(常量)在上篇博客中有介绍,三、Java-----常量-优快云博客)
变量的分类:
整型变量:
1.关于声明整型变量(int):
上文说到,变量在声明时可选择是否初始化。
其一,变量在声明时初始化,即在定义时就给出初始值。如果没有合适的初始值,建议初始值赋为0。
例如:
int a = 10;
//定义一个整型变量a,a是变量名,该变量中放置的值为10
其二,变量在声明时不初始化,即在定义时没有给初始值。此时需牢记,该变量在使用前必须设置初值。例如:
int b;
b = 20;
System.out.println(b);
上述代码意为,声明一个int型变量b,输出b之前,必须给b赋初值。如果使用前没有赋值,将会报错。
注意:
①在定义int型变量时,赋值不能超过int的范围(-2^31 ~ 2^31-1)。超出范围会导致溢出。
②Java中不论何种系统,int始终占4个字节。
③int的包装类型为Integer。
2.关于声明短整型变量(short):
short c = 10; //short定义的短整型变量
注意:
①short表示范围为-32768 ~ 32767。
②Java中不论何种系统,short始终占2个字节。
③short的包装类型为Short。
3.关于声明长整型变量(long):
long d = 10; //long定义的长整型变量
long e = 20L;
long f = 30l;
注意:
①为了与int类型区分,在声明long类型变量时,初始值后加L或l,一般加L(因为小写字母l与1容易混淆)。
②long表示范围为-2^63 ~ 2^63-1。
③Java中不论何种系统,long始终占8个字节。
④long的包装类型为Long。
4.关于声明字节型变量(byte):
byte g = 10;
注意:
①byte表示范围为-128 ~ 127。
②Java中不论何种系统,byte始终占1个字节。
③byte的包装类型为Byte。
浮点型变量:
1.关于声明双精度浮点型变量(double):
double h = 3.14;
注意:
①Java中不论何种系统,double始终占8个字节。
②double的包装类型为Double。
2.关于声明单精度浮点型变量(float):
float i = 11.11f;//写作11.11F也行
注意:
①Java中不论何种系统,float始终占4个字节。
②由于float表示的数据精度范围较小,工程上用浮点型数据时优先考虑double。
③float的包装类型为Float。
3.浮点型变量的精度问题
在Java中,浮点型变量(float 和 double)的内存布局都是基于IEEE 754标准实现的,这和C语言一样。浮点型变量在表示小数时存在精度限制,即它们尝试在有限的内存空间内表示可能无限的小数,一定会出现精度误差,这是由二进制浮点数的本质决定的。因此,浮点数都是近似值,不是精确值。
(1)二进制浮点数的局限:
计算机使用二进制表示浮点数,而许多十进制小数无法精确转换为二进制。例如十进制的0.1,它的二进制表示是无限循环小数,导致存储时被截断,产生误差。
(2)IEEE 754标准的内存结构:
类型 | 总位数 | 符号位 | 指数位 | 尾数位 | 精度(十进制有效位数) |
float | 32位 | 1位 | 8位 | 23位 | 6~7位 |
double | 64位 | 1位 | 11位 | 52位 | 15~16位 |
tips:
尾数位决定了精度,即尾数位数越多,精度越高;
指数位决定了范围,即指数位数越多,能表示的值范围越大。
例1:
int a = 1;
int b = 2;
System.out.println(a / b);//预计值为0.5,实际输出0
此时,从数学上说,a / b结果是0.5;从程序上说,结果是0。因为int类型不能保存小数部分,发生截断,小数点后的数据丢失。如果想得到结果为0.5,需使用double类型进行计算。
double a1 = 1.0;
double b1 = 2.0;
System.out.println(a1 / b1);//0.5
例2:
double c = 0.1;
double d = 0.2;
double sum = c + d; // 预期值为0.3,实际输出 0.30000000000000004
System.out.println(sum);
字符型变量:
关于声明字符型变量(char):
char c1 = 'A'; // 大写字母
char c2 = '1'; // 数字字符
char c3 = '好'; // 中文字符
注意:
①在Java中,使用“单引号+单个字母”的形式表示字符字面值。
②计算机中字符本质是一个整数,字符型变量无负数。
在C语言中,使用ASCII表示字符,char占一个字节;在Java中,使用Unicode表字符,字符种类多,可表示中文,char占两个字节。
③char的包装类型为Character。
布尔型变量:
关于声明布尔型变量(boolean):
boolean boo1 = true;
boolean boo2 = false;
注意:
①Java中布尔类型变量只有两种取值:true 和 false。
②在Java中,进行运算时,布尔类型与其它类型不兼容,无法进行运算。
③boolean的包装类型为Boolean。
字符串类型:
关于声明字符串类型变量(String):
在Java中使用String类声明字符串类型。例如:
String s1 = "hello";
String s2 = "world";
System.out.println(s1); // 输出hello
System.out.println(s2); // 输出world
System.out.println(s1+s2); // 输出helloworld
// s1+s2表示:将s1和s2进行拼接
博客均为博主自身学习总结,如有错误之处,烦请大佬们指正!