当前位置: 首页 > news >正文

Java包装类与泛型详解

基本类型与包装类的对应关系

8种基本类型及其包装类对应如下:

  • byte → Byte
  • short → Short
  • int → Integer
  • long → Long
  • float → Float
  • double → Double
  • char → Character
  • boolean → Boolean

Integer和Character的命名与其他包装类不同,其余包装类均为基本类型首字母大写。

装箱与拆箱操作

手动装箱与拆箱:

Integer ii = Integer.valueOf(10); // 手动装箱
int j = ii.intValue(); // 手动拆箱

自动装箱与拆箱:

Integer ii = 10; // 自动装箱
int j = ii; // 自动拆箱

避免在循环中频繁使用自动装箱,因为会产生额外的对象创建开销。

包装类的缓存机制

Integer缓存范围默认是-128到127:

Integer a = 127;
Integer b = 127;
System.out.println(a == b); // trueInteger c = 128;
Integer d = 128;
System.out.println(c == d); // false

其他包装类如Long、Short也有类似的缓存机制,但范围可能不同。

泛型的核心价值

传统Object数组的问题:

Object[] arr = new Object[3];
arr[0] = "string";
arr[1] = 123; // 编译通过,运行时报错风险
String s = (String) arr[1]; // ClassCastException

泛型改进:

MyArray<String> arr = new MyArray<>();
arr.add("hello");
String s = arr.get(0); // 无需强制转换

泛型类的定义

基本语法:

class MyArray<T> {private T[] array;// ...
}

类型实参必须是类类型,基本类型需使用对应的包装类。类型推导简化写法:

MyArray<String> arr = new MyArray<>();

泛型擦除机制

编译后泛型类型会被擦除,替换为Object或上界类型。通过反射创建泛型数组的正确方式:

public <T> T[] createArray(Class<T> clazz, int size) {return (T[]) Array.newInstance(clazz, size);
}

泛型上界

约束类型参数的范围:

class NumberContainer<T extends Number> {// T只能是Number或其子类
}

复杂上界:

class SortedList<T extends Comparable<T>> {// T必须实现Comparable接口
}

泛型方法

独立于类的泛型方法:

public static <T> void swap(T[] arr, int i, int j) {T temp = arr[i];arr[i] = arr[j];arr[j] = temp;
}

静态泛型方法必须在static后声明类型参数。使用方法:

swap(arr, 0, 1); // 类型推导
Util.<String>swap(arr, 0, 1); // 显式指定

实践建议
  • 多练习编写泛型类和泛型方法
  • 分析Java集合框架中的泛型应用
  • 通过解决编译错误深入理解泛型约束
  • 结合反射理解擦除机制的实际影响
http://www.dtcms.com/a/431348.html

相关文章:

  • 举报非法网站要求做笔录昌乐网站建设
  • 个人网站作品欣赏杭州开发网站的公司哪家好
  • 12-Redis+有序集合类型实战指南:从分数排序到排行榜场景落地
  • 延时任务之Redis 过期事件监听原理与缺陷
  • Redis 扩展数据类型
  • 汕头企业网站建设设计班级网站 模板
  • 拉格朗日乘子法
  • 电商网站设计是干什么的高碑店网站建设价格
  • 网站源代码制作四大门户网站对比分析
  • 教学网站开发背景及意义怎样下载黑龙江人社app
  • 系统环境异常、网络适配难,黑科技一站式解决
  • 【APK安全】系统管理器安全风险与防御指南
  • 有做淘宝网站的在线网络制作系统
  • 【VSCode中Java开发环境配置的三个层级之Maven篇】(Windows版)
  • 10.1 刷题心得
  • 前端-Vue工程化
  • 深圳企业网站制作中心用网站做CAN总线通信好吗
  • 中山移动网站建设报价三室一厅二卫装修效果图
  • .net商城网站开发做封面的地图网站
  • 复习一下Cpp(1)
  • 什么网站访问量公司变更地址需要多少钱
  • final字段单元测试
  • 车载Class D功放电源脚烧蚀可能原因
  • 34线城市做网站推广最新新闻事件摘抄
  • 嵌入式ARM程序高级调试技能:26. ARM Linux CPU高负载分析:系统调用过多导致的线程高负载案例
  • 无锡企业自助建站系统网站开发和游戏开发的区别
  • 外贸网站平台都有哪些平台毕业设计做网站简单吗
  • dotnet-sdk-5.0.408-win-x64安装教程(附详细步骤和附安装包)
  • 数据要素X_解读 第三批“数据要素×”典型案例——金融服务领域【附全文阅读】
  • 一篇文章讲清Prompt、Agent、MCP、Function Calling