Java基础(包装类)

文章目录

前言

一、包装类的概述

二、自动拆装箱

三、128陷阱(面试重点)

四、自动拆装箱例题分析


前言

该篇文章创作时参考查阅了如下文章

Java种的包装类

Java包装类(自动拆装箱)

Java--自动拆箱/装箱/实例化顺序/缓存--使用/原理/实例

若想详细了解可自行进入相关文章进行查看


一、包装类的概述

Java有8种基本数据类型:整型(byte、short、int、long)、浮点型(float、double)、布尔型boolean、字符型char

相对应地,Java提供了8种包装类对应这8种基本数据类型Byte、Short、Integer、Long、Float、Double、Boolean、Character

包装类创建对象的方式跟其他类一样

java 复制代码
Integer num = new Integer(0);    //创建一个数值为0的Integer对象

二、自动拆装箱

面向对象中,"一切皆对象",但基本数据类型的数据不太符合这一理念,基本数据类型不是对象,因此java设计出来了一个包装类。

在编译器将.java文件编译称为.class的文件这个过程当中,我们通过包装类创建的对象会被进行自动拆装箱

(装箱就是将基本数据类型转化为包装类型,那么拆箱就是将包装类型转化为基本数据类型。)

java 复制代码
Integer b = 10;
//自动装箱
//会被编译成 Integer b = Integer.valueOf(10);   

int a = b;
//自动拆箱
//会被编译成 int a = b.intValue();   

三、128陷阱(面试重点)

java 复制代码
public static void main(String[] args) {
		Integer num1 = 100;
		Integer num2 = 100;
		System.out.println(num1 == num2);
		
		Integer num3 = 200;  
		Integer num4 = 200;
		System.out.println(num3 == num4);
}

解析:

答案就在Integet的valueOf()方当中,通过分析valueOf方法的代码可知,我们将数值在-128-127之间的数值都存储在一个catch数组当中,该数组相当于一个缓存,当我们在-128-127之间进行自动装箱的时候,我们就直接返回该值在数组当中的地址,所以在-128-127之间的数值用==进行比较是相等的;而不在这个区间的数,需要新开辟一个内存空间,所以不相等。

四、自动拆装箱例题分析

java 复制代码
public static void main(String[] args) {
    int  a = 10;
    int  b = 10;
    Integer a1 = 10;
    Integer b1 = 10;
    Integer a2 = new Integer(10);
    Integer b2 = new Integer(10);
    System.out.println(a == b);    // T   基本数据类型 == 比较值
    System.out.println(a1 == b1);    // T  128陷阱
    System.out.println(a2 == b2);    // F  引用数据类型 == 比较地址
    System.out.println(a1 == a);    // T 用 == 判断,自动拆箱
    System.out.println(a1.equals(a));    // T 用 equals() 判断,自动装箱
    System.out.println(a1 == a2);    // F  引用数据类型 == 比较地址
    System.out.println(a == a2);    // T a2自动拆箱
}
相关推荐
Agome995 分钟前
Docker之nginx安装
java·nginx·docker
炸膛坦客7 分钟前
C++ 学习与 CLion 使用:(四)常量和变量,包括字面常量和符号常量
开发语言·c++·学习
java1234_小锋37 分钟前
说说你对Integer缓存的理解?
java·开发语言
至此流年莫相忘1 小时前
TypeReference 泛型的使用场景及具体使用流程
java·开发语言·spring boot
windSnowLi1 小时前
Python opencv识别图片中重叠圆的圆心位置
开发语言·python·opencv
Warren981 小时前
Spring Boot 拦截器返回中文乱码的解决方案(附全局优化思路)
java·网络·spring boot·redis·后端·junit·lua
练习时长一年2 小时前
SpringMVC相关自动配置
java·spring boot·后端
bemyrunningdog2 小时前
SpringCloud架构实战:从核心到前沿
java
都叫我大帅哥2 小时前
动态规划:从懵逼到装逼,一篇让你彻底搞懂DP的终极指南
java·算法
王廷胡_白嫖帝3 小时前
Qt网络速度测试工具开发教程 - 从零开始构建网络测速应用
开发语言·网络·qt