包装类初识泛型

news2024/11/25 12:05:32

一.包装类

在Java中, 基本类型不继承于Object类. 所以为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了一个包装类型.(包装类型相当于引用类型)

1.基本类型对应的包装类

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

我们可以从中找到规律: 除了int和char, 其余基本类型的包装类都是首字母大写.

2.装箱和拆箱

(1) 装箱: 就是把基本类型变成包装类型. 装箱需要调用Integer类的valueOf方法, 装箱有两种方式:手动装箱和自动装箱 (显式装箱和隐式装箱)

int a = 10;

Integer ii = Integer.valueOf(a); // 手动装箱(显式装箱)

Integer ii2 = a; //自动装箱(隐式装箱)

(2) 拆箱: 就是把引用类型(包装类型)变成基本类型.拆箱需要用到intValue方法,拆箱也有两种方式:手动拆箱和自动拆箱 (显式拆箱和隐式拆箱)

Integer ii = 10;

int a = ii.intValue(); //手动拆箱(显式拆箱)

int a = ii; //自动拆箱(隐式拆箱)

[面试题] :

    public static void main(String[] args) {
        Integer a = 100;
        Integer b = 100;
        
        Integer c = 200;
        Integer d = 200;

        System.out.println(a == b);
        System.out.println(c == d);
    }

问, 上述代码输出什么?

答案:

为什么输出true和false呢?  我们可以看到, 四行代码进行的操作都是装箱.装箱操作会调用valueOf方法, 我们查看valueOf的源码:

从中可以看到 , 如果i是在[low, high)这个范围之内(对于Integer来说, low = -128, high = 127), 那么就是去cache数组中取值返回; 相反,如果i不在这个范围内, 就会实例化一个Integer类的对象返回.

此时我们在看这个代码: a和b在这个范围内, 那么a,b都是从这个数组中取值.又因为a和b的值相等,所以a,b是从数组的同一位置取值的. 所以a,b的包装类值相等 ;  而c,d不在这个范围内,所以c,d是都是新实例化的对象, c和d是两个不同的对象, 地址肯定不相同,所以c,d的包装类值不等.

二.泛型

1.泛型的概念

一般的类和方法,只能使用基本类型和引用类型,这种刻板的限制对代码的束缚就很大. 所以Java引入了"泛型"这个语法. 泛型: 就是适用于许多类型. (泛型实现了类型的参数化 -- 可以传指定类型的参数).

首先我们先看一个代码示例:

我们可以看到,上述代码的问题是: (1) 这个数组中任何类型的数据都能存放.  (2) 用String类的对象接收"hello"时,需要强转(因为在这里"hello"是Object类型的)   但是, 更多情况下,我们还是更希望数组中只存放一种类型的数据.此时就要用到泛型.

所以,泛型的主要目的就是: 指定当前容器(类 / 方法)要持有什么类型的对象,并以参数形式传递此类型(需要什么类型,就传入什么类型), 让编译器去做检查.

注意: 类型参数传的必须是引用类型(包装类型), 不能是基本类型!!!

2.泛型类

语法形式:

class 泛型类名称<类型参数列表> {
  // 在这里可以使用类型参数
}

代码示例:

 

泛型类的使用示例:

 运行结果:

 

3.泛型方法

泛型方法: 即方法的返回值以参数方式指定

代码示例:

注意事项: 引用类型对象的大小比较,是不能直接使用 ">", "<" 的, 需要重写Object类的CompareTo方法, 再调用CompareTo方法对两者进行比较.

4.泛型的上界

泛型的上界, 就是对泛型表示类型的范围做出了限制.

例如:

此行代码表示: 传进来的类型参数E 必须是继承于Comparable接口的.

 

上述代码表示: 传进来的类型参数T 必须是继承于Number类的. 

以上就是本篇博客的全部内容啦,如果喜欢小编的文章,可以点赞,评论,收藏~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1597300.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

20V/3A大电流线性稳压器替代MIC29302/MIC29300

概述(替代MIC29302/MIC29300) PCD3942 是一款低压差稳压器&#xff0c;专为快速瞬态响应而优化。该装置能够提供 3A 的输出电流&#xff0c;典型压降为 325mV。工作静态电流为 1mA&#xff0c;关机时降至 1μA 以下&#xff0c;同时压差模式下静态电流控制良好。除了快速瞬态响…

lua学习笔记20(lua中一些自带库的学习)

print("*****************************lua中一些自带库的学习*******************************") print("*************时间***************") --系统时间 print(os.time()) --自己传入参数得到时间 print(os.time({year2011,month4,day5})) --os.data(&qu…

《HF经理》:二认知误区

一、管理者掌握重要权力&#xff1a; 二、全力来自管理者的职位&#xff1a; 三、管理者必须控制自己的直接下属&#xff1a; 对策&#xff1a;展示自己的品质&#xff0c;能力和影响力 四、管理者必须建立良好的个人关系&#xff1a; 五、管理这必须确保一切运行正常&…

深度学习框架

深度学习框架 1 引言 在当今技术加速发展的时代&#xff0c;深度学习已经成为了人工智能领域内最为引人注目的子领域之一。其在图像识别、自然语言处理、自动驾驶等多个行业中的成功应用&#xff0c;已经证明了深度学习在解决复杂问题方面的巨大潜力。然而&#xff0c;深度学习…

31、链表-K个一组反转链表

思路&#xff1a; 首先知道如何反转链表&#xff0c;其次找出每组的开始节点和结束节点&#xff0c;然后对于不足与k个的链表保持原状。 代码如下&#xff1a; class Solution {public ListNode reverseKGroup(ListNode head, int k) {if (headnull||k1){return head;}ListN…

一个小小逻辑符的错误使用,资损几万块?

分享是最有效的学习方式。 博客&#xff1a;https://blog.ktdaddy.com/ 故事 这是一个真实事件&#xff0c;三年前老猫负责公司的支付资产业务。为了响应上级号召&#xff0c;加强国央企之间的合作&#xff0c;公司新谈了一个支付对接的渠道&#xff08;当然这个支付渠道其实很…

IT精英的财富攻略:五大策略揭秘

IT精英的财富攻略&#xff1a;五大策略揭秘 &#x1f4b8; 数字化浪潮汹涌&#xff0c;IT技能成为职场的金钥匙&#x1f511;&#xff0c;更为智慧的IT人打开了赚钱的大门。如果你身怀网络维护与安全管理的绝技&#xff0c;那么这五大策略&#xff0c;正是你蓄势待发的赚钱法宝…

【Qt 学习笔记】Qt常用控件 | 按钮类控件Push Button的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 按钮类控件Push Button的使用及说明 文章编号&#xff1…

09 - 镜像管理之:部署单点harbor

本次准备了3台机器&#xff1a;harbor-01、harbor-02、harbor-db&#xff0c;用于测试 单点模式、高可用模式 部署 harbor。 ip主机名规格操作系统说明192.168.217.136harbor-012c4gCentos7.9harbor 服务器&#xff0c;测试单点harbor192.168.217.135harbor-022c4gCentos7.9ha…

快速探索随机树-RRT

文章目录 简介原理算法运动规划的变体和改进简介 快速探索随机树(RRT)是一种算法,旨在通过随机构建空间填充树来有效搜索非凸高维空间。该树是从搜索空间随机抽取的样本中逐步构建的,并且本质上偏向于向问题的大型未搜索区域生长。RRT 由 Steven M. LaValle 和 James J. K…

数据库SQL语言实战(一)

目录 创建SQL表 题目一 题目二 题目三 插入数据 题目一 题目二 题目三 总结 创建SQL表 题目一 创建学生信息表&#xff08;学生编号、姓名、性别、年龄、出生日期、院系名称、班级&#xff09;&#xff1a; test1_student&#xff1a;sid char 12 not null、nam…

Unity Shader之数学篇

一、坐标系 1、二维笛卡尔坐标系 屏幕坐标系是二维笛卡尔坐标系&#xff0c;OpenGL的屏幕坐标系原点在左下角&#xff0c;DirectX的屏幕坐标系原点在左上角。 2、三维笛卡尔坐标系 三维笛卡尔坐标系要区分是左手坐标系还是右手坐标系。 左手坐标系&#xff1a;举起你的左手…

3.Burp Suite 入门篇 —— 修改请求

目录 前言 官网注册 Burp 浏览器访问漏洞页面 登陆购物网站账号 修改请求包 漏洞挖掘 前言 本篇文章会教你如何用 Burp Proxy 修改截获的请求。 修改请求包是为了通过网站程序规定之外的方式请求&#xff0c;然后对比查看响应内容的变化&#xff0c;判断是否有漏洞存在…

Wpf 使用 Prism 实战开发Day20

备忘录功能页面完善以及优化 备忘录功能基本跟前一章节的待办事项差不多一至&#xff0c;就不再做过多的笔述了 一.备忘录功能完整页面源码 MemoView.xaml <UserControl x:Class"MyToDo.Views.MemoView"xmlns"http://schemas.microsoft.com/winfx/2006/xam…

src挖掘 | 未授权访问+密码重置

0x01系统初探 通过fofa对大学进行搜索 fofa:host"edu.cn" && status_code"200" 在随意的翻阅查看时&#xff0c;发现访问xxx.edu.cn登录页面会优先访问登录后的页面&#xff0c;再跳转至登录页面。盲猜应该是前端校验&#xff0c;可以通过抓包拦…

Qt5 编译oracle数据库驱动

库文件 1、Qt源码目录&#xff1a;D:\Qt5\5.15.2\Src\qtbase\src\plugins\sqldrivers\oci 2、oracle客户端SDK: https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html 下载各版本中的如下压缩包&#xff0c;一定要版本相同的 将两个压缩包…

【基础物理实验】【AFM虚拟实验】基于AFM的物质表面微观结构及力学性质表征仿真实验(上)【北京航空航天大学】

基于AFM的物质表面微观结构及力学性质表征仿真实验 说明&#xff1a; 本次实验为本科生《基础物理实验》课程中的虚拟实验部分&#xff0c;在虚拟实验平台中进行。 一、实验目的&#xff1a; 1. 掌握AFM的基本成像原理及系统结构&#xff1b; 2. 掌握AFM的基本操作技巧及操…

【Modelsim】保持波形格式重编译and波形的保存与查看

文章目录 保持原波形格式重编译波形的保持与查看保存波形打开工程查看波形 保持原波形格式重编译 Modelsim 仿真设置好波形格式后&#xff0c;若需要修改代码并保持原波形格式重新查看波形&#xff0c;只需将文件重新编译后仿真即可。 1.修改代码后Project页面的代码状态变成…

特氟龙(PFA)实验室器具有哪些?

PFA 是被称为塑料王&#xff0c;具有出众的化学耐受性&#xff0c;并且可在出色的温度范围内执行工作。 PFA 呈半透明&#xff0c;柔韧&#xff0c;并且由于其高密度重量有点重。PFA 具有惰性和低粘合性&#xff0c;溶出物和痕量金属含量较低。它具有较宽的含氟聚合物温度范围…

3.00 版本来了!DolphinDB V2.00.12 V3.00.0 正式发布!

一文带你了解 DolphinDB 全新版本升级&#xff01; 本次更新后&#xff0c;3.00.0版本将成为 DolphinDB 的最新版&#xff0c;2.00.12版本变更为稳定版&#xff0c;此前发布的1.30.23版本将成为1.30系列的最后一个版本。接下来&#xff0c;带大家一起看看 DolphinDB V2.00.12 …