先赞后看,养成习惯!!!添加链接描述 ^ _ ^ ❤️ ❤️ ❤️
码字不易,大家的支持就是我坚持下去的动力,点赞后不要忘记关注我哦
个人主页:伯明翰java
文章专栏:JavaSE
如有错误,请您指正批评 ^ _ ^
总览:
- Java的数据类型只有两大类:8大基本数据类型与引用数据类型。其中基本数据类型又被称为值类型。
- 基本数据类型只能存自己类型的值,无其他额外的功能。
基本数据类型
类型概述
- 六种数字类型
-
- 四种整数型:byte,short,int,long
-
- 二种浮点型:float,double
- 一种字符类型:char
- 一种布尔类型:boolean

char类型的数据可以存储任何字符
float,double不能用来表示精确的值,运算不精确------>解决方案:BigDecimal。创建BigDecimal对象的方式: - BigDecimal(double val) : double类型的数据作为参数,交给BigDecimal对象【不用,因为double本身不精确】
基本数据类型和引用数据类型的区别
- 存储方式:基本数据类型直接存储值,而引用数据类型存储的是对象的引用(内存地址)
- 内存分配:基本数据类型在栈上分配内存,引用数据类型在堆上分配内存(具体内容存放在堆中,栈中存放的是其具体内容所在内存的地址)。栈上的分配速度较快,但是内存空间较小,而堆上的分配速度较慢,但可以分配更大的内存空间
- 默认值:基本数据类型会有默认值,例如int类型的默认值是0,boolean类型的默认值是false。而引用数据类型的默认值是null,表示没有引用指向任何对象
- 复制操作:基本数据类型进行复制时,会复制该变量的值。而引用数据类型进行复制时,只会复制对象的引用,两个变量指向同一个对象
- 参数传递:基本数据类型作为方法的参数传递时,传递的是值的副本,不会修改原始值。而引用数据类型作为方法的参数传递时,传递的是对象的引用,可以修改对象的属性或状态
- 比较操作:基本数据类型使用进行比较时,比较的是值是否相等。而引用数据类型使用进行比较时,比较的是引用是否指向同一个对象,如果要比较对象的内容是否相同,需要使用equals()方法
Java的基本数据类型对应的包装类对基本数据类型进行了封装,使其具有了对象的特性,可以调用方法和类型转换等操作。
基本数据类型与包装类区别
- 存储方式:基本类型直接存储值,而包装类型存储的是对应基本类型值的对象。
- 空值处理:基本类型没有空值(null)的概念,而包装类型可以将null作为有效值来表示缺失或无效值。
- 默认值:基本类型有默认值,例如int类型的默认值是0,boolean类型的默认值是false。而包装类型的默认值是null。
- 对象操作:基本类型不能直接调用方法,而包装类型可以调用对应的方法,例如Integer类的intValue()方法可以获取保存在Integer对象中的值。
- 自动装箱/拆箱:基本类型和包装类型之间可以进行自动装箱和拆箱的转换。自动装箱是指将基本类型的值自动转换为对应的包装类型对象,如int 转Integer,Integer integer = 100,底层调用了Interger.valueOf(100)方法;而自动拆箱则是将包装类型对象自动转换为基本类型的值。
- 泛型支持:泛型只能使用引用类型,不能直接使用基本类型。因此,当需要在泛型中使用基本类型时,需要使用对应的包装类型。
- 比较方式:基本类型使用进行比较时,比较的是值是否相等。而包装类型使用进行比较时,比较的是引用是否指向同一个对象,而不是比较值是否相等。若要比较包装类型的值是否相等,需要使用equals()方法。
数据类型转换
自动类型转换(隐式)
⾃动类型转换即:代码不需要经过任何处理,在代码编译时,编译器会⾃动进⾏处理。特点:数据范围⼩的转为数据范围⼤的时会⾃动进⾏。
java
System.out.println(1024); // 整型默认情况下是int
System.out.println(3.14); // 浮点型默认情况下是double
int a = 100;
long b = 10L;
b = a; //int 类型的值 ⾃动转换为了long类型
float f = 3.14F;
double d = 5.12;
d = f; //float 类型的值 ⾃动转换为了double 类型
强制类型转换(显式)
强制类型转换:当进⾏操作时,代码需要经过⼀定的格式处理,不能⾃动完成。特点:数据范围⼤的到数据范围⼩的。
java
int a = 10;
long b = 100L;
b = a; // int-->long,数据范围由⼩到⼤,隐式转换
a = (int)b; // long-->int, 数据范围由⼤到⼩,需要强转,否则编译失败
float f = 3.14F;
double d = 5.12;
d = f; // float-->double,数据范围由⼩到⼤,隐式转换
f = (float)d; // double-->float, 数据范围由⼤到⼩,需要强转,否则编译失败
byte b1 = 100; // 100默认为int,没有超过byte范围,隐式转换
byte b2 = (byte)257; // 257默认为int,超过byte范围,需要显⽰转换,否则报错