1、 java数据类型概述
Java语言中的数据类型分为两大类,分别是基本类型和引用类型。数据都有对应的数据类型,数据不同在内存中占用大小不同。
2、数据存储的单位
位、字节、字 是计算机数据存储的单位。
位(bit):是计算机中最小的单位,也是最基本的概念,在计算机中,由于只有逻辑0和逻辑1的存在,即每一个逻辑0或者1便是一个位。每一个位存储一个1位的二进制码,一个字节由8位组成。
字节(byte):计算机中处理数据的基本单位,是由八个位组成的一个字节,8个bit组成1个Byte
字(word):代表计算机处理指令或数据的二进制数位数,是计算机进行数据存储和数据处理的运算的单位,在常见的计算机编码格式下,一个字等于两个字节(十六位)(1word = 2Byte = 16bit)
2.1、进制转换:
二转十:按位乘
二转八:421法则
二转十六:8421法则
字符转二:ASCII编码
图片:RGB
3、 基本数据类型
Java基本类型共有八种,基本类型可以分为三类,字符类型char,布尔类型boolean以及数值类型byte、short、int、long、float、double。数值类型又可以分为整数类型byte、short、int、long和浮点数类型float、double。JAVA中的数值类型不存在无符号的,它们的取值范围是固定的,不会随着机器硬件环境或者操作系统的改变而改变。实际上,JAVA中还存在另外一种基本类型void,它也有对应的包装类 java.lang.Void,不过我们无法直接对它们进行操作。
3.1、八种数据类型
3.2、基本数据类型演示及注意事项
1)整型(4个): byte(字节型)、short(短整型)、int(整型)、long(长整型)
byte a = 199;
short s = 199;
int a = 199;
long a = 199L;
注. 声明long类型数据的时候,后面需要加L或者l
2)浮点型(2个):float(单精度型/浮点型) 、double(双精度型
float f = 1.0f;
double d = 1.0;
注:1)声明float类型的数据的时候加f或者F;
2)double类型的数据的有效位数 15~16;
3)float类型的数据有效位数是 6~7;
3)字符(1个): char(字符型
char a = 'a'
4)布尔类型:(1个): boolean(布尔类型)
数据只有true、flase
4、引用数据类型
4.1、类引用
1)Object :Object是所有类的父类也是类层次结构的根类,每个类都使用Object作为超类,所有对象(包括数组)都可以实现这个类的方法,用Object可以定义所有的类
2)String :String类代表字符串,Java 程序中的所有字符串字(如"abc")。
3)Date :Date表示特定的瞬间,精确到毫秒。Date的类一般现在都被Calendar 和GregorianCalendar所有代替
4)Void :Void 类是一个不可实例化的占位符类,它保持一个对代表 Java 关键字 void 的 Class 对象的引用。
4.2、接口interface引用
1)List:列表 ,此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引 (在列表中的位置)访问元素,并搜索列表中的元素。List 接口提供了两种搜索指定对象的方法。从性能的观点来看,应该小心使用这些方法。在很多实现中,它们将执行高开销的线性搜索。 List 接口提供了两 种在列表的任意位置高效插入和移除多个元素的方法。
2)add() : 在列表的插入指定元素。
3)remove():移除列表中指定位置的元素。
4)get(int index):返回列表中指定位置的元素。
4.3、数组引用
数组:型存储在一个连续的内存块中的相同数据类(引用数据类型)的元素集合。
数组中的每一个数据称之为数组元素,数组中的元素以索引来表示其存放的位置,索引(下标)从0开始。
5、类型转换(自动转换、强制转换)
5.1、类型转换图
5.2、自动类型转换
自动类型转换:范围小的类型自动转换为范围大的数据类型再参与运算(范围小转范围大)
public static void main(String[] args) {
//1.多个类型数据混合运数时,系统会按最大的类型进行转换
int a = 10;
//float a1 = a + 1.1; //错误 结果类型一个是double
float a2 = a + 1.1F; //结果类型一个是float
double a3 = a + 1.1; //结果类型一个是double
//2.容量大的赋值给容量小的肯定会报错
//int b = 1.1; //错误 原因:double -> int
//3.(byte,short) 和 char之间不会相互自动转换
byte b1 = 10; //正确
int b2 = 1;
//byte b3 = b2; //错误 原因:变量赋值,判断该类型
//char c1 = b1; //错误 原因:byte不能自动转换为char
//4.byte,short,char该三个数据类型计算,计算时首先转换为int类型
byte c1 = 1;
short c2 = 2;
//short c3 = c1 + c2; //错误 原因:计算时首先转换为int类型
int c3 = c1 + c2; //正确
}
5.3、强制类型转换
强制类型转换:将范围大的数据类型转换为范围小的数据类型(范围大转范围小)
注意:
1)强转会造成数据丢失或溢出
2)浮点转整数,小数部分直接省略保留整数部分
public static void main(String[] args) {
//1.精度降低或溢出
int i = (int) 1.9; //结果 1
//2.强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
//int x = (int) 10 * 3.5 + 6 * 1.5;//编译错误
int x = (int) (10 * 3.5 + 6 * 1.5);//正确 (int)44.0 -> 44
//3.char类型可以保留int的常量值,不能保存int的变量值需要强转
char c = 100; //保留int的常量值
int i = 100;
//char m = i; //错误
char m = (char) i; //正确
}
5.4隐含强制类型转换(初始化)
1)在变量的初始化时,整数的默认类型是 int。byte b = 123; 123 默认是 int 类型,他会隐含强制转换为低级别的 byte 和 short 类型,所以不用显示强制转换;但是 int 类型只能显式强制转换为 long 型,所以 long a = 123L;
2)浮点型不存在这种情况,因为在定义 float 类型时必须在数字后面跟上 F 或者 f