包装类初识泛型

一.包装类

在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.mzph.cn/news/818186.shtml

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

相关文章

用c++实现串匹配问题、选择排序

5.2.2 串匹配问题 【问题】 给定两个字符串S和T&#xff0c;在主串S中查找子串T的过程称为串匹配(string matching,也称模式匹配&#xff09;&#xff0c;T称为模式。在文本处理系统、操作系统、编译系统、数据库系统以及 Internet 信息检索系统中&#xff0c;串匹配是使用最频…

便宜的dv ssl证书推荐

SSL数字证书是维护互联网安全的重要手段之一。SSL数字证书主要目的是保护客户端和服务器数据传输的安全&#xff0c;防止网站数据在传输过程中被窃取或者篡改。其次&#xff0c;SSL数字证书能够验证网站的身份和合法性&#xff0c;防止用户访问到假冒或钓鱼网站。此外&#xff…

C语言基础---指针的基本语法

概述 内存地址 在计算机内存中&#xff0c;每个存储单元都有一个唯一的地址(内存编号)。通俗理解&#xff0c;内存就是房间&#xff0c;地址就是门牌号 指针和指针变量 指针&#xff08;Pointer&#xff09;是一种特殊的变量类型&#xff0c;它用于存储内存地址。指针的实…

每日一VUE——组件的生命周期

文章目录 VUE组件的生命周期生命周期钩子函数实例创建Teleport VUE组件的生命周期 组件生命周期 组件从创建到挂载、更新、到销毁的一系列过程被称为组件的生命周期。 生命周期函数 在组件的各个生命周期节点执行的函数&#xff0c;为生命周期钩子函数。 生命周期钩子函数…

科技感画册制作方法,视觉效果直接拉满

随着科技的不断进步&#xff0c;科技感画册制作也变得更加精彩和引人注目。通过巧妙地运用先进的设计工具和技术&#xff0c;以及结合创新的视觉元素&#xff0c;可以轻松地将画册的视觉效果直接拉满。 那你想知道怎么制作吗&#xff1f;现在我来教你这个方法吧&#xff0c;方法…

六、新闻主题分类任务

以一段新闻报道中的文本描述内容为输入&#xff0c;使用模型帮助我们判断它最有可能属于哪一种类型的新闻&#xff0c;这是典型的文本分类问题。我们这里假定每种类型是互斥的&#xff0c;即文本描述有且只有一种类型&#xff0c;例如一篇新闻不能即是娱乐类又是财经类&#xf…

企业Linux常见用户命令/补充Linux文件系统删除原理/userdel(故障原理/etc/skel)详谈-9628字

想提高自己想拿20k以上冲冲冲&#xff01;&#xff01;&#xff01;&#xff0c;想要从0 学习到linux架构师可以关注小编专栏 本来都很卷&#xff0c;你还不努力&#xff0c;想拿高薪&#xff0c;付出行动! linux难点第一阶段非常难 1.命令多复杂&#xff08;大家抓不住重点&am…

Python爬虫与数据可视化论文课题免费领取咨询

引言 作为一名在软件技术领域深耕多年的专业人士&#xff0c;我不仅在软件开发和项目部署方面积累了丰富的实践经验&#xff0c;更以卓越的技术实力获得了&#x1f3c5;30项软件著作权证书的殊荣。这些成就不仅是对我的技术专长的肯定&#xff0c;也是对我的创新精神和专业承诺…

boot https ssl

生成命令&#xff1a; keytool -importkeystore -srckeystore D:\sslTest.keystore -destkeystore D:\sslTest.keystore -deststoretype pkcs12keytool -genkeypair -alias "sslTestKey" -keyalg "RSA" -keystore "D:\sslTest.keystore"yml: s…

RISCV指令集体系简读之RV32M

RV32M向RV32I中添加了整数乘法和除法指令&#xff1b; RV32M具有有符号和无符号整数的除法指令&#xff1a;divide(div)和divide unsigned(divu)&#xff0c;它们将 商放入目标寄存器。在少数情况下&#xff0c;程序员需要余数而不是商&#xff0c;因此RV32M提供 remainder(rem…

使用IT-Tools+Cpolar在Windows搭建自己的IT工具箱并实现远程在线使用

文章目录 1. 使用Docker本地部署it-tools2. 本地访问it-tools3. 安装cpolar内网穿透4. 固定it-tools公网地址 本篇文章将介绍如何在Windows上使用Docker本地部署IT- Tools&#xff0c;并且同样可以结合cpolar实现公网访问。 在前一篇文章中我们讲解了如何在Linux中使用Docker搭…

MercadoLibre(美客多)入仓预约系统操作流程-自动化约号(开篇)

目录 一、添加货件信息 二、输入货件信息 三、选择发货 四、填写交货日期 五、注意事项 MercadoLibre&#xff08;美客多&#xff09;于2021年10月18号上线了新预约入仓系统&#xff0c;在MercadoLibre美客多平台上&#xff0c;新入仓预约系统是一项非常重要的功能&#x…

JAVA基础06-面向对象,构造器,递归以及对象创建时内存分析(内含代码与练习)

面向对象的概念以及特征 概念 实质上将 "数据" 与 "行为" 的过程, 以类的形式封装起来, 一切以对象为中心语言。 面向对象的程序设计过程中有两个重要概念&#xff1a;类&#xff08;class&#xff09;和对象&#xff08;也称为实例&#xff09;。 其中…

【Css】table数据为空,以“-“形式展现

解决&#xff1a;class类名 它表示的是在一个名为class类名的元素内部&#xff0c;当该元素为空时&#xff0c;会在该元素的:before伪元素上应用一些样式。 这种写法通常用于在元素内容为空时&#xff0c;添加一些占位符或者提示文字

代码随想录算法训练营第五十五天 | 392. 判断子序列、115. 不同的子序列

代码随想录算法训练营第五十五天 | 392. 判断子序列、115. 不同的子序列 392. 判断子序列题目解法 115. 不同的子序列题目解法 感悟 392. 判断子序列 题目 解法 题解链接 自己的想法实现 class Solution { public:bool isSubsequence(string s, string t) {if(s.size() >…

20240328-1-Prophet面试题

Prophet面试题 1. 简要介绍Prophet 常见的时间序列分解方法&#xff1a; 将时间序列分成季节项 S t S_t St​&#xff0c;趋势项 T t T_t Tt​&#xff0c;剩余项 R t R_t Rt​&#xff0c;即对所有的 t ≥ 0 t≥0 t≥0 y t S t T t R t y_{t}S_{t}T_{t}R_{t} yt​St​Tt…

人员聚集监测识别摄像机

随着科技的不断发展&#xff0c;人员聚集监测识别摄像机已经成为了现代社会安全管理的重要工具。这种摄像机能够对人员聚集的情况进行实时监测和识别&#xff0c;帮助相关部门及时发现和处理潜在的安全风险。 人员聚集监测识别摄像机可以通过高清晰度的摄像头和先进的人脸识别技…

windows的jar包开机自启动【搬代码】

感觉最方便的就是放到启动项目里操作步骤 winR 输入&#xff1a;shell:startup回车或点击确定 3.将自己jar包右键创建快捷方式 4.然后放进去 5.重启电脑&#xff0c;浏览器输入网址&#xff0c;就可以看到重启成功了 另外一个就是放入.exe文件的快捷方式 首先&#xff0c;…

OpenGL 多重采样抗锯齿(MSAA,Multisample Anti-Aliasing)

多重采样抗锯齿(MSAA,Multisample Anti-Aliasing)是一种用于减少图形渲染中锯齿(aliasing)效应的技术。 锯齿是怎样产生的? 锯齿效应是由于在屏幕上渲染的图形对象边缘处像素颜色变化突然而导致的,它使得图形看起来不够平滑,影响了视觉质量。 如图示,我们渲染一个三…