java包装类的作用、基本类型和包装类型的区别

简介: java包装类的作用、基本类型和包装类型的区别

java中有8中基本数据类型,对应都有各自的包装类如图:

主要原因

因为Java是一种面向对象语言,很多地方都需要使用对象而不是基本数据类型

1.对象化

包装类将基本类型封装成对象,使其具有对象的特性,例如可以调用方法、进行比较和使用泛型等。这对于需要将基本类型作为对象处理的情况非常有用。

2.泛型支持

泛型只能接受引用类型,而不能接受基本类型。通过使用包装类,可以将基本类型转换为引用类型,并在泛型中使用。

3.集合框架支持

Java的集合框架(如List、Set、Map等)只能存储对象,无法直接存储基本类型。包装类提供了将基本类型转换为对象的功能,使其可以被集合框架使用。

4.null值表示

包装类可以表示null值,而基本类型不具备这种能力。这在需要表示一个值可能不存在的情况下很有用,例如数据库查询结果可能为空的情况。

5.类型转换

包装类提供了许多方法用于类型转换和数值处理。例如,Integer类提供了parseInt()方法用于将字符串转换为整数。

6.反射操作

反射操作通常涉及到对象的创建、方法调用和字段访问,因此需要使用引用类型。通过使用包装类,可以对基本类型进行反射操作。

为了让基本类型也具有对象的特征,就出现了包装类型,它相当于将基本类型“包装起来,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。

基本类型和包装类型的区别

1.默认值不同

基本类型的默认值为0,false或\u0000等,包装类默认为null

2.初始化方式不同

一个需要new,一个不需要。

3.存储方式不同

基本类型保存在栈上,包装类对象保存在堆上(成员变量的话,在不考虑川T优化的栈上分配时,都是随着对象一起保存在堆上的)。

4.泛型支持不同

基本类型不能直接用于泛型类型参数包装类型可以使用泛型,因为它们是引用类型。

5.基本类型不具备对象的方法和属性

不能调用方法或访问属性,包装类型是对象,可以调用对象的方法和访问对象的属性。

目录
相关文章
|
2月前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
83 14
|
1月前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
25 1
|
2月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
65 8
|
2月前
|
存储 Java 开发者
Java 中 Set 类型的使用方法
【10月更文挑战第30天】Java中的`Set`类型提供了丰富的操作方法来处理不重复的元素集合,开发者可以根据具体的需求选择合适的`Set`实现类,并灵活运用各种方法来实现对集合的操作和处理。
|
2月前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
78 4
|
2月前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
84 2
|
2月前
|
存储 Java 编译器
Java泛型类型擦除以及类型擦除带来的问题
泛型擦除是指Java编译器在编译期间会移除所有泛型信息,使所有泛型类型在运行时都变为原始类型。例如,`List<String>` 和 `List<Integer>` 在JVM中都视为 `List`。因此,通过 `getClass()` 比较两个不同泛型类型的 `ArrayList` 实例会返回 `true`。此外,通过反射调用 `add` 方法可以向 `ArrayList<Integer>` 中添加字符串,进一步证明了泛型信息在运行时被擦除。
50 2
|
Java
Java基本类型数组转ArrayList
先来看源码 当我们调用Arrays.asList(array) 时,实际是执行了包可见的ArrayList的构造函数(注意通常这个构造函数对用户是不可见的,所以不能通过List list = new ArrayList(...
1436 0
|
10天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者
|
12天前
|
安全 Java Kotlin
Java多线程——synchronized、volatile 保障可见性
Java多线程中,`synchronized` 和 `volatile` 关键字用于保障可见性。`synchronized` 保证原子性、可见性和有序性,通过锁机制确保线程安全;`volatile` 仅保证可见性和有序性,不保证原子性。代码示例展示了如何使用 `synchronized` 和 `volatile` 解决主线程无法感知子线程修改共享变量的问题。总结:`volatile` 确保不同线程对共享变量操作的可见性,使一个线程修改后,其他线程能立即看到最新值。