预备知识---java中的包装类(装包与拆包)

简介: 预备知识---java中的包装类(装包与拆包)

基本数据类型和包装类直接的对应关系

2.png

基本就是类型的首字母大写,除了 Integer 和 Character。


装包/装箱

装包(装箱)的概念

把简单类型 包装成 对应的包装类


装包的形式(两种)

自动装包

显示装包

代码示例

public class TestDemo3 {
    public static void main(String[] args) {
        int a = 10;
        //显示装包方法1:
        Integer integer1 = new Integer(a);
        //输出结果为10
        System.out.println(integer1);
        //显示装包方法2:使用valueof方法
        Integer integer2 = Integer.valueOf(a);
        //输出结果为10
        System.out.println(integer2);
        //自动装包 
        //自动装包程序内部其实也是调用了Integer.valueof方法
        Integer integer3 = a;
        //输出结果为10
        System.out.println(integer3);
    }
}

拆包/拆箱

拆包(拆箱)的概念

把包装类变为简单类型


拆包的形式(两种)

自动拆箱

显示拆箱

代码示例

public class TestDemo3 {
    public static void main(String[] args) {
        //自动拆箱
        Integer integer = 10;
        int b = integer;
        //输出结果为10
        System.out.println(b);
        //显示拆箱
        //调用intValue方法
        int c = integer.intValue();
        //输出结果为10
        System.out.println(c);
        //调用doubleValue方法
        double d = integer.doubleValue();
        //输出结果为10.0
        System.out.println(d);
    }
}

练习(一般出选择题)

判断下面的语句是true还是false

public class TestDemo3 {
    public static void main(String[] args) {
        Integer a = 100;
        Integer b = 100;
        //true
        System.out.println(a == b);
        Integer c = 139;
        Integer d = 139;
        //false
        System.out.println(c == d);
    }
}

为什么等于100的时候为true,等于139的时候就为fasle了呢?

答:首先我们把简单类型给包装类是装包,装包底层调用的都是Intger.valueOf方法,下面我们来看valueOf方法的源码:

2.png

可以看到当i=100的时候此时进入到我们的valueOf方法中,然后进行if语句的判断:

2.png

可以看到当我们点到low的时候,low的值为-128,high的值如下所示,为1272.png

所以当我们传入100的时候,100此时大于-128,小于127,所以执行里面的语句,可以看到最后返回的是一个缓存数组cache,这个数组的取值范围为-128-127,说明数组中一共有256个数字,然后当i=100的 时候,此时要返回的值在数组的下标值为100+(-(-128))=228,所以此时返回cache数组中下标为228所对应的数字.也就是100这个数字,所以此时当我们判断a==b的时候,其实就是两个数字判断是否相等,此时当然相等,所以返回true.

而当我们输入的形参i值为139时,此时其范围已经超出了-128到127之间,那么此时便会返回一个新的对象,所以说c,d会分别创造一个自己的对象,那么前面我们说过,对象和对象之间的比较其实就是引用和引用之间的比较,而其比较的就是地址是否相同,c,d每次创建的新的对象都存在堆中,而地址是不相同的,所以c == d的值为false


相关文章
|
3月前
|
安全 Java API
JAVA并发编程JUC包之CAS原理
在JDK 1.5之后,Java API引入了`java.util.concurrent`包(简称JUC包),提供了多种并发工具类,如原子类`AtomicXX`、线程池`Executors`、信号量`Semaphore`、阻塞队列等。这些工具类简化了并发编程的复杂度。原子类`Atomic`尤其重要,它提供了线程安全的变量更新方法,支持整型、长整型、布尔型、数组及对象属性的原子修改。结合`volatile`关键字,可以实现多线程环境下共享变量的安全修改。
|
1月前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
52 4
|
2月前
|
Java Apache Maven
Java/Spring项目的包开头为什么是com?
本文介绍了 Maven 项目的初始结构,并详细解释了 Java 包命名惯例中的域名反转规则。通过域名反转(如 `com.example`),可以确保包名的唯一性,避免命名冲突,提高代码的可读性和逻辑分层。文章还讨论了域名反转的好处,包括避免命名冲突、全球唯一性、提高代码可读性和逻辑分层。最后,作者提出了一个关于包名的问题,引发读者思考。
Java/Spring项目的包开头为什么是com?
|
3月前
|
Java 编译器 容器
Java——包装类和泛型
包装类是Java中一种特殊类,用于将基本数据类型(如 `int`、`double`、`char` 等)封装成对象。这样做可以利用对象的特性和方法。Java 提供了八种基本数据类型的包装类:`Integer` (`int`)、`Double` (`double`)、`Byte` (`byte`)、`Short` (`short`)、`Long` (`long`)、`Float` (`float`)、`Character` (`char`) 和 `Boolean` (`boolean`)。包装类可以通过 `valueOf()` 方法或自动装箱/拆箱机制创建。
43 9
Java——包装类和泛型
|
3月前
|
Java API 数据处理
Java 包(package)的作用详解
在 Java 中,包(package)用于组织和管理类与接口,具有多项关键作用:1)系统化组织代码,便于理解和维护;2)提供命名空间,避免类名冲突;3)支持访问控制,如 public、protected、默认和 private,增强封装性;4)提升代码可维护性,实现模块化开发;5)简化导入机制,使代码更简洁;6)促进模块化编程,提高代码重用率;7)管理第三方库,避免命名冲突;8)支持 API 设计,便于功能调用;9)配合自动化构建工具,优化项目管理;10)促进团队协作,明确模块归属。合理运用包能显著提升代码质量和开发效率。
125 4
|
3月前
|
Java 数据安全/隐私保护
Java 包(package)的使用详解
Java中的包(`package`)用于组织类和接口,避免类名冲突并控制访问权限,提升代码的可维护性和可重用性。通过`package`关键字定义包,创建相应目录结构即可实现。包可通过`import`语句导入,支持导入具体类或整个包。Java提供多种访问权限修饰符(`public`、`protected`、`default`、`private`),以及丰富的标准库包(如`java.lang`、`java.util`等)。合理的包命名和使用对大型项目的开发至关重要。
158 2
|
2月前
|
Java
【Java】什么是泛型?什么是包装类
【Java】什么是泛型?什么是包装类
20 0
|
4月前
|
Java 程序员
【Java基础面试八】、为啥要有包装类?
这篇文章解释了Java中存在包装类的原因:为了让基本数据类型具备对象的特性,使得它们可以被用作对象,以符合Java"一切皆对象"的设计理念,并简化将基本数据类型作为Object类型参数传递的问题。
【Java基础面试八】、为啥要有包装类?
|
3月前
|
存储 Java 测试技术
Java零基础教学(10):包装类
【9月更文挑战第1天】Java零基础教学篇,手把手实践教学!
48 1
|
4月前
|
Java Maven 数据库