Java数据类型:基本数据类型和引用数据类型
为了方便存储物品,我们可以规定每个盒子存放的物品种类。同理,Java中变量的存储也讲究“分门别类”
变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来存储该类型数据
因此,通过定义不同类型的变量,可以在内存中储存不同类型的数据。如:整数、小数、字符...
变量在声明时被指定为一个特定的类型,声明后类型就不能被改变了
Java的两大数据类型:
- 基本数据类型(Primitive Type)
- 引用数据类型(Reference Type)
基本数据类型的变量存储的是数据本身,而引用数据类型的变量存储的是保存数据的空间地址
—— 即基本数据类型变量里存储的是直接放在抽屉里的东西,而引用数据类型变量里存储的是这个抽屉的钥匙,钥匙和抽屉一一对应
基本数据类型
- byte(字节型)
- short(短整型)
- int(整型)
- long(长整型)
- float(单精度浮点型)
- double(双精度浮点型)
- char(字符型)
- boolean(布尔型)
共8种基本数据类型,可分为4类:
4种整数类型 - byte、short、int、long
2种浮点类型 - float、double
1种字符类型 - char
1种布尔类型 - boolean
基本数据类型 | 关键字 | 占用内存 | 取值范围 | 默认值 |
字节型 | byte | 1字节,8位 | -128 ~ 127 | 0 |
短整型 | short | 2字节,16位 | -32768 ~ 32767 | 0 |
整型 | int | 4字节,32位 | -2147483648 ~ 2147483647 | 0 |
长整型 | long | 8字节,64位 | -9223372036854775808L ~ 9223372036854775807L | 0L |
单精度浮点数 | float | 4字节,32位 | -3.4E-38 ~ 3.4E+38(6-7个有效位) | 0.0f |
双精度浮点型 | double | 8字节,64位 | -1.8E+308 ~ 1.8E+308(15个有效位) | 0.0d |
字符型 | char | 2字节,16位 |
单一的16位Unicode字符 最大值是 \ufff(即65535) |
'u0000' |
布尔型 | boolean | 1字节,8位 | true / false | false |
1个字节有8位
整数类型(均有符号)
- byte 类型
byte类型是最小的整数类型
用在大型数组中会节省内存空间,可代替int整型,因为byte类型变量占用的空间为int类型变量的1/4
当用户从网络/文件中处理数据流时,或者处理可能与Java其它内置类型不直接兼容的未加工的二进制数据时,该类型非常有用
byte a = 100; byte b = -50;
- short 类型
short数据类型也较为节省内存空间。因为short类型变量占用的空间为int类型变量的1/2
但short类型限制数据的存储为先高字节,后低字节。这样在某些机器中会出错,因此该类型很少被使用
short s = 1000; short r = -20000;
- int 类型
int类型是最常使用的一种整数类型。整数类型的变量默认为int类型
int age = 18; int b = -200000;
- long 类型
long类型主要使用在需要较大整数的系统上(当超出int类型的取值范围就需要使用long类型)
// "L"理论上不分大小写,但是小写"l"容易与数字"1"混淆,不容易分辩。所以建议大写 long a = 100000L; long b = -200000L;
public class Learn { public static void main(String[] args) { byte a = 10; short b = 20; int c = 30; long d = 40; long sum = a + b + c + d; System.out.println("10+20+30+40=" + sum); } }
包括单精度浮点型(float)和双精度浮点型(double),代表有小数精度要求的数字
float类型和double类型之间的区别:
主要是所占用的内存大小不同(float类型占用4字节的内存空间,double类型占用8字节的内存空间)
双精度类型double比单精度类型float具有更高的精度和更大的表示范围
注意:float类型 - 必须以 f/F 结束。否则会被当作double类型
- float 类型
float类型在存储大型浮点数组时可节省内存空间(仅能存储小数)
float height = 172.5f; float price = 12.2f;
- double 类型
浮点数类型的变量默认为double类型
double price = 15.8; double score = 95.0d;
public class Learn { // 从A地到B地路程为2348.4米,那么往返两地路程共多少米 public static void main(String[] args) { // 定义double类型的变量,用于存储单程距离 double distance = 2348.4; // 定义int类型的变量,用于存储次数 int num = 2; // 定义float类型的变量,用于存储往返两地的总路程。并将其转为float类型 float total = (float)(distance * num); System.out.println("往返AB两地的路程共:" + total + "米"); } }
double类型的数据与int类型的数据相乘后得到的结果类型为double
但由于单程距离乘以次数为一个单精度浮点型(float类型)的数,因此可以将总距离转换为float类型的数据
boolean 类型
boolean类型用于通过逻辑运算对两个数值进行判断,判断其结果是“真”还是“假”
boolean类型的值不能转换成任何数据类型。true常量不等于1,且false常量也不等于0。这两个值只能赋给声明为boolean类型的变量,或者用于布尔运算表达式中
public class Learn { public static void main(String[] args) { // 先声明boolean类型的变量isAbled boolean isAbled; // 再对变量isAbled进行赋值 isAbled = true; // 声明boolean类型的变量b,并赋值 boolean b = false; System.out.println(isAbled); System.out.println(b); } }
char 类型
char类型用来表示单个的字符
public class Learn { public static void main(String[] args) { char letter = 'A'; char numChar = '5'; System.out.println("A的ASCII值与B的ASCII值相加结果为" + (letter+numChar)); } }
引用数据类型
- 引用数据类型就是对一个对象的引用,对象包括实例和数组两种
- 一个引用变量可以引用任何与之兼容的类型
- 所有引用数据类型的默认值都是null
- 空类型(null type)就是null值的类型,这种类型没有名称。因为null类型没有名称,所以不可能声明一个null类型的变量或者转换到null类型
- 空引用(null)是null类型变量唯一的值。空引用(null)可以转换为任何引用类型
注意:null 只能被转换成引用类型,不能转换成基本类型,因此不能把null值赋给基本数据类型的变量
WebKeyword web = new WebKeyword();