Java中List<?>和List<Object>区别小结

 更新时间:2025年09月05日 09:38:34   作者:青秋.  
List<?>和 List<Object> 是两种在 Java 中用于表示泛型集合的方式,下面就来介绍一下Java中List<?>和List<Object>区别小结,感兴趣的可以了解一下

List<?>和 List<Object> 是两种在 Java 中用于表示泛型集合的方式,但它们有不同的含义和用法。下面是这两者之间的区别:

1. List<?>

List<?> 是通配符类型(Wildcard Type)的一种表示方式。`?` 表示可以是任何类型,但无法对其进行操作,例如获取或设置元素的类型。

特点:

`List<?>` 表示一个类型未知的 `List`,其中元素的类型可以是任意的(例如 `List<Integer>`、`List<String>` 等)。
- 只能从 `List<?>` 中读取元素,但无法向其中添加元素(除了 `null`)。

import java.util.List;
import java.util.ArrayList;

public class WildcardExample {
    public static void main(String[] args) {
        List<?> list1 = new ArrayList<String>();  // 可以是任意类型的 List
        List<?> list2 = new ArrayList<Integer>();
        // 你可以读取元素,但不能添加非 null 的元素
        Object obj = list1.get(0);  // 获取元素,返回类型为 Object
        // 以下行会报错,因为不能向 List<?> 中添加元素
        // list1.add("Hello");   // 编译错误
        // list1.add(10);        // 编译错误
    }
}

2. List<Object>

`List<Object>` 是一个具体的类型参数,它表示一个可以包含任意类型的对象的 `List`。由于所有 Java 类(包括自定义类)都继承自 `Object`,所以 `List<Object>` 可以存储任何类型的元素。
- `List<Object>` 是一个 `List`,其中的元素必须是 `Object` 或其子类(即任何对象)。
- 你可以向 `List<Object>` 添加任何类型的元素,甚至是 `null` 或者不同类型的对象。

import java.util.List;
import java.util.ArrayList;

public class ObjectListExample {
    public static void main(String[] args) {
        List<Object> list = new ArrayList<>();
        
        list.add("Hello");  // 添加一个 String
        list.add(10);       // 添加一个 Integer
        list.add(3.14);     // 添加一个 Double

        // 可以从 list 中获取任何类型的元素,但需要进行类型转换
        Object obj1 = list.get(0);  // 返回 Object 类型,需要强制转换
        String str = (String) obj1; // 需要类型转换
        System.out.println(str);     // 输出 "Hello"
    }
}

到此这篇关于Java中List<?>和List<Object>区别的文章就介绍到这了,更多相关Java List<?> List<Object>区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用SpringBoot实现一个基于本地代理模式的RPC调用框架

    利用SpringBoot实现一个基于本地代理模式的RPC调用框架

    虽然Dubbo、gRPC等成熟框架已经为我们提供了完整的RPC解决方案,但理解其底层原理并动手实现一个简化版本,对提升我们的技术理解深度很有帮助,下面我们就来看看如何使用SpringBoot实现一个基于本地代理模式的RPC调用框架吧
    2025-07-07
  • Java编程long数据类型的使用问题

    Java编程long数据类型的使用问题

    这篇文章主要介绍了Java编程数据类型long的使用问题,涉及长整型数据的取值范围和不同整数类型的表示方法,需要的朋友可以参考下
    2017-09-09
  • springboot 整合 langchain4j 实现简单的问答功能

    springboot 整合 langchain4j 实现简单的问答功能

    最近在学习langchain4j,本文将介绍如何使用langchain4j快速实现一个简单的问答功能,结合实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2025-04-04
  • Springboot参数校验之分组校验、嵌套校验的实现

    Springboot参数校验之分组校验、嵌套校验的实现

    日常开发中,免不了需要对请求参数进行校验,诸如判空,长度,正则,集合等,复杂一点的请求参数可能会包含嵌套,分组校验,本文就详细的介绍一下,感兴趣的可以了解一下
    2023-08-08
  • SpringBoot整合Quartz方法详解

    SpringBoot整合Quartz方法详解

    这篇文章详解介绍了SpringBoot整合Quartz的方法,Quartz是一个比较成熟了的定时任务框架,本文实例代码给大家详细讲解,需要的朋友可以参考下
    2023-04-04
  • Spring Boot源码实现StopWatch优雅统计耗时

    Spring Boot源码实现StopWatch优雅统计耗时

    这篇文章主要为大家介绍了Spring Boot源码实现StopWatch优雅统计耗时,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Spring容器的创建过程之如何注册BeanPostProcessor详解

    Spring容器的创建过程之如何注册BeanPostProcessor详解

    关于BeanPostProcessor 各位一定不陌生,今天整理的这篇文章总结了如何注册BeanPostProcessor,文中有非常详细的图文示例,需要的朋友可以参考下
    2021-06-06
  • 关于SpringBoot打包测试、生产环境方式

    关于SpringBoot打包测试、生产环境方式

    这篇文章主要介绍了关于SpringBoot打包测试、生产环境方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Java中如何保证缓存一致性问题

    Java中如何保证缓存一致性问题

    这篇文章主要介绍了Java中如何保证缓存一致性问题,文章将通过主题提出的问题展开一些解决方案分析,需要的小伙伴可以参考一下
    2022-04-04
  • Spring bean 四种注入方式详解

    Spring bean 四种注入方式详解

    这篇文章主要介绍了Spring bean的实例化和IOC依赖注入详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-07-07

最新评论