简单带大家了解一下数据类型吧!!!!
数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。
数据类型可分为基本数据类型和引用数据类型。下面就带大家具体阐述一个基本数据类型和引用数据类型。
基本数据类型
基本数据类型包括整数、浮点数、字符和布尔。
-
整数又可以分为四类,主要依据的是数的取值范围,可分为byte(字节)、short、int、long
说明:一个字节(byte)等于8位,总共有2^8个状态。为什么是2^8个状态,而不是8个状态?因为一个位拥有两个状态,而且一个字节等于8位,因此总共有2^8个状态。
1、byte:在内存中占据一个字节,拥有2^8个状态,则存储的范围是-2^7~2^7-1;如果定义了一个变量a为byte类型,并且给变量赋值a赋值一个在它存储范围的一个具体的数值,再给它赋值一个大于2^7-1的一个具体的数值,会出现什么样的结果呢?举例说明吧:
class Test{
public static void main(String[] args){
//错误1
/*
输入在该范围内的一个具体数值
运行结果如下:
PS F:\JavaSE\Day02> javac Test.java
PS F:\JavaSE\Day02> java Test
a的值为:100
*/
byte a=100;
System.out.println("a的值为:" + a);//a的值为:100
/*
在定义一个变量数据类型为byte,赋值为200
运行结果如下:
Test.java:16: 错误: 不兼容的类型: 从int转换到byte可能会有损失
byte b=200;
^
1 个错误
*/
byte b=200;
System.out.println("b的值为:" + b);
//错误2
/*
同理在定义两个变量c、d、e
运行结果:
错误: 不兼容的类型: 从int转换到byte可能会有损失
*/
byte c=10;//该整数再存储范围内
byte d=30;//该整数再存储范围内
byte e=c+d;
System.out.println("e的值为:" + e);
}
}
分析:为什么会出现上述原因?第一:由于对于任意的一个整数来说,它只要赋值给一个变量,不管这个变量是什么基本数据类型,这个整数都会被默认为int;第二:当这个数值要复赋值给一个变量是,先看这个变量是属于什么数据类型,内存给它分配了多少存储空间,我是否能将该数值存下,会出现种种问题。
例如:参考上述代码——当定义了一个基本数据类型为byte的变量a时,内存就知道给它分配多大的空间,因为在计算机中都是以二进制存储;
//错误1的原因:
byte a=100;
/*
就相当于给改数据类型分配了存储空间,可存储的范围为-2^7~2^7-1,即0 0 0 0 0 0 0 0
又因为在计算机中数据都是以二进制所存储的,则再将给变量a赋值为100时——即0 1 1 0 0 1 0 0
对于一个整数来说则被默认为int:
00000000 00000000 00000000 0 1 1 0 0 1 0 0
0 1 1 0 0 1 0 0
因此改编译正确
*/
byte b=200;
/*
同理,可存储的范围为-2^7~2^7-1,当给变量b赋值为200时——即1 1 0 0 1 0 0 0
int——00000000 00000000 0000000 0 1 1 0 0 1 0 0 0 因为有效位数是后面的八位,但是还有一位是符号位0表示正,1表示负
| 1 1 0 0 1 0 0 0
|
上面的0表示符号位
因此就会出现int转byte可能会有损失
*/
//错误2的原因
byte c=10;//该整数再存储范围内
byte d=30;//该整数再存储范围内
byte e=c+d;
/*
虽然变量c、d在该范围内,但是e实际并不知道c、d的值具体为多大,因此就会出现
错误: 不兼容的类型: 从int转换到byte可能会有损失
*/
2、short:占二个字节,与byte同理,范围为-2^15~2^15-1;
3、int:占四个字节,范围为-2^31~2^31-1,因为任意一个整数被默认为int,因此不会出现上述现象;
4、long:占八个字节,范围为-2^63~2^63-1,与int同理。
-
浮点数:包括float(占四个字节)、double(占八个字节)。字符常量通常为double
注:整数 + 浮点数(double) = 浮点数(double)
-
字符:占两个字节,范围为0~65535,指的是字符编码。
-
布尔:并没有具体给出占多少字节,true/false。
注:在Java当中并没有给boolean一个明确的大小,主要和底层虚拟机相关
引用数据类型
引用数据类型主要包括字符串、数组、对象、null。
未完待续·················