数据结构学习1 初识泛型

装箱和拆箱

装箱/装包: 把一个基本数据类型转变为包装类型

拆箱/拆包: 把一个包装类型转变为一个基本数据类型

        int a = 1;Integer i = a;// 自动装箱int b = i;// 自动拆箱Integer ii = Integer.valueOf(a);// 手动装箱,推荐使用 Integer.valueOf() 而不是 new Integer()int bb = ii.intValue();// 手动拆箱

自动装箱和自动拆箱

{int a = 1;//Integer ii = a; //自动装箱Integer ii = Integer.valueOf(a);
//        Integer ii2 = new Integer(2);Integer ii2 = Integer.valueOf(2);int b = ii2; //自动拆箱System.out.println(a);System.out.println(b);}

反汇编

new的时候调用了init构造方法

{Integer ii = 100;Integer ii2 = 100;System.out.println(ii == ii2);}

运行结果为

{Integer ii = 200;Integer ii2 = 200;System.out.println(ii == ii2);}

运行结果为

这是为什么呢

这既然是包装类型 , 那么可能调用了valueOf方法

可以看到最小值为-128

进入IntegerCache

最大值为128

如果在-128到127之间

那么返回的是下标为 i + 128的数组的值

因为存储的是-128到127

泛型

泛型在c++中叫做模版

引出泛型

实现一个类,类中包含一个数组成员,使得数组中可以存放任何类型的数据,也可以根据成员方法返回数组中某个下标的值?

使用Object类型

class Myarray {public Object[] array = new Object[10];public void setValue(int pos, int val) {array[pos] = val;}public Object getValue(int pos) {return array[pos];}
}

代码定义了一个名为 Myarray 的类,其中有一个包含 Object 类型的数组 array,并提供了设置和获取数组元素值的方法。

然而,虽然数组的类型是 Object[],但 setValue 方法中将一个 int 类型的值直接赋给数组元素。这是因为数组的元素类型是 Object,而 int 是基本数据类型。在这种情况下,会发生自动装箱,将 int 装箱为 Integer

即不能放任意类型的元素

将setValue改为

public void setValue(int pos, Object val) {array[pos] = val;}

可以使用该数组存放任意类型的数据了

但是

为什么不能给String类型呢?

因为Object是String的父类类型

改为

String str = (String) myarray.getValue(2);

不过这数组中存放的是String类型

怎么又强转起来了?

感觉多此一举了

现在看看自己的目的:存放任何类型的数据,也可以根据成员方法返回数组中某个下标的值

现在把类型改为

class Myarray<T> 
public T[] array = new T[];但是不能new一个 T 类型的数组

改成

public T[] array = (T[]) new Object[10];

暂时骗过编译器

可以发现不报错了

这里我觉得, 个人理解, T像是一个占位符 可以放String 也可以放Integer类型 (包装类型, 除了int是Integer , char是Character之外 其他都是本身大写)

总结

泛型的意义: 

1. 在编译的时候 检查数据类型是否正确

2. 在编译的时候, 帮助进行类型转换

补充:

要是

Myarray<Person> myarray1 = new Myarray<>();

改为

Myarray myarray1 = new Myarray();呢

是不会报错的

这种类型叫做裸类型

上面泛型的代码也可以写为

class Myarray<T> {
//    public T[] array = (T[]) new Object[10];public Object[] array = new Object[10];public void setValue(int pos, T val) {array[pos] = val;}public T getValue(int pos) {return (T) array[pos];}
}

有帮助的话记得点个赞哦

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

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

相关文章

本地读取Excel文件并进行数据压缩传递到服务器

在项目开发过程中&#xff0c;读取excel文件&#xff0c;可能存在几百或几百万条数据内容&#xff0c;那么对于大型文件来说&#xff0c;我们应该如何思考对于大型文件的读取操作以及性能的注意事项。 类库&#xff1a;Papa Parse - Powerful CSV Parser for JavaScript 第一步…

springboot116基于java的教学辅助平台

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的基于java的教学辅助平台 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四…

基于光口的以太网 udp 回环实验

文章目录 前言一、系统框架整体设计二、系统工程及 IP 创建三、UDP回环模块修改说明四、接口讲解五、顶层模块设计六、下载验证前言 本章实验我们通过网络调试助手发送数据给 FPGA,FPGA通过光口接收数据并将数据使用 UDP 协议发送给电脑。 提示:任何文章不要过度深思!万事万…

从白子画到东方青苍,你选择谁来守护你的修仙之旅?

从白子画到东方青苍,你选择谁来守护你的修仙之旅? 在繁花似锦的修仙世界中&#xff0c;每一位追梦者都渴望有那么一位守护者&#xff0c;与你共患难&#xff0c;共成长。热血与浪漫交织的《花千骨》与《苍兰诀》&#xff0c;给我们带来了两位风华绝代的守护者&#xff1a;白子…

磁盘初始化会丢失文件吗?答案揭晓!

“由于我的电脑出现了一些问题&#xff0c;我就将磁盘初始化了&#xff0c;但是里面还有很重要的文件&#xff0c;磁盘初始化了文件会丢失吗&#xff1f;有什么方法可以恢复丢失的文件呢&#xff1f;” 当我们谈论磁盘初始化&#xff0c;通常是指对硬盘或固态驱动器&#xff08…

解决执行npm(或pnpm)时报:证书过期 certificate has expired问题

项目执行 pnpm install 初始化时报 reason: certificate has expired 错误。 解决方案 1、取消ssl验证&#xff1a;npm config set strict-ssl false这个方法一般就可以解决了。2、更换npm镜像源&#xff1a;npm config set registry http://registry.cnpmjs.org npm config …

第13节-简历中的开放性问题

(点击即可收听) 不少公司的开放式题目每年不会有太大的变化&#xff0c;所以在答题前可先去相关求职论坛看看这些公司往年的问题&#xff0c;分析和思考自己应当怎么回答 开放式问题回答技巧 开放式问题主要考察的是求职者的求职动机、解决问题的能力、创造力等软实力&#xff…

linux|操作系统|centos7物理机安装网卡驱动8188gu(内核升级,firmware固件,USB设备管理,module管理)

前言&#xff1a; 目前服务器领域centos7基本是主流的操作系统&#xff0c;而linux相对于Windows来说&#xff0c;软硬件方面的支持是差很多的&#xff0c;在硬件方面来说&#xff0c;以一个免驱的网卡为例&#xff0c;window xp可能不会自动识别到&#xff0c;但Windows10基本…

JUC并发编程与源码分析学习笔记(二)

二十九、多线程锁之线程锁知识概述 说说Java“锁”事 从轻松的乐观锁和悲观锁开讲 通过8种情况演示锁运行案例&#xff0c;看看我们到底锁的是什么 公平锁和非公平锁 可重入锁&#xff08;又名递归锁&#xff09; 死锁及排查 写锁&#xff08;独占锁&#xff09;/读锁&a…

Java中创建List接口、ArrayList类和LinkedList类的常用方法(一)

List接口 要了解List接口&#xff0c;就不得不说起Java的集合框架。 &#xff08;该图来自菜鸟教程&#xff09; Collection接口和Map接口 Java 集合框架主要包括两种类型的容器&#xff0c;集合Collection和图Map。 Collection接口代表了单列集合&#xff0c;它包含了一组…

微信公众号怎么申请超过2个

一般可以申请多少个公众号&#xff1f;目前公众号申请数量的规定是从2018年底开始实施的&#xff0c;至今没有变化。规定如下&#xff1a;1、个人可以申请1个个人主体的公众号&#xff1b;2、企业&#xff08;有限公司&#xff09;可以申请2个公众号&#xff1b;3、个体户可以申…

MyBatis 的XML实现方法(JAVA)

数据库表的结构如下&#xff1a; DROP DATABASE IF EXISTS test; CREATE DATABASE test DEFAULT CHARACTER SET utf8mb4; -- 使⽤数据数据 USE test; -- 创建表[⽤⼾表] DROP TABLE IF EXISTS userinfo; CREATE TABLE userinfo ( id INT ( 11 ) NOT NULL AUTO_INCREMENT, user…

如何本地搭建Splunk Enterprise数据平台并实现任意浏览器公网访问

文章目录 前言1. 搭建Splunk Enterprise2. windows 安装 cpolar3. 创建Splunk Enterprise公网访问地址4. 远程访问Splunk Enterprise服务5. 固定远程地址 前言 本文主要介绍如何简单几步&#xff0c;结合cpolar内网穿透工具实现随时随地在任意浏览器&#xff0c;远程访问在本地…

MacM1Pro Parallels19.1.0 CentOS7.9 Install PostgrepSQL

相关阅读 MacM1Pro安装 Parallels Desktop 19.1.0 https://blog.csdn.net/qq_41594280/article/details/135420241 MacM1Pro Parallels安装Parallels Tools https://blog.csdn.net/qq_41594280/article/details/135398780 MacM1Pro Parallels安装CentOS7.9 https://blog.csdn.n…

win7或win10如何设置休眠不断网

win7电脑一断休眠wifi网络就会断&#xff0c;那么怎么办呢?该如何设置Win7电脑休眠时不断开WiFi呢?怎么办呢&#xff1f;下面为大家介绍一下方法能使大脑休眠时不断开WiFi网络。 设置Win7电脑休眠时不断开WiFi教程如下&#xff1a; 1、首先点击桌面右下角的.无线图标&#xf…

[嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集

上一篇&#xff1a;[嵌入式软件][启蒙篇][仿真平台] STM32F103实现LED、按键 文章目录 一、串口输出(1) 简介(2) 示例代码(3) 仿真效果 二、串口输入(1) 简介(2) 示例代码(3) 仿真效果 三、ADC采集(1) 简介(2) 示例代码&#xff08;电压&#xff09;(3) 仿真效果 &#xff08;…

Conda python管理环境environments 一 从入门到精通

Conda系列&#xff1a; 翻译: Anaconda 与 miniconda的区别Miniconda介绍以及安装Conda python运行的包和环境管理 入门 使用 conda&#xff0c;可以创建、导出、列出、删除和更新 具有不同 Python 版本和/或 安装在其中的软件包。在两者之间切换或移动 环境称为激活环境。您…

vue中的插槽

在vue中&#xff0c;有的名词听着高大上&#xff0c;挺怪异的&#xff0c;比如插槽&#xff0c;就是slot&#xff0c;它的作用是为了解决组件之间写的内容在组件中的使用问题。 一、插槽的作用 <!DOCTYPE html> <html> <head><title>Vue中的插槽</…

接口测试-Mock测试方法

一、关于Mock测试 1、什么是Mock测试&#xff1f; Mock 测试就是在测试过程中&#xff0c;对于某些不容易构造&#xff08;如 HttpServletRequest 必须在Servlet 容器中才能构造出来&#xff09;或者不容易获取的比较复杂的对象&#xff08;如 JDBC 中的ResultSet 对象&#…

EHS管理系统为何需要物联网的加持?

EHS是Environment、Health、Safety的缩写&#xff0c;是从欧美企业引进的管理体系&#xff0c;在国外也被称为HSE。EHS是指健康、安全与环境一体化的管理。 而在国内&#xff0c;整个EHS市场一共被分成三类&#xff1b; 一类是EHS管培体系&#xff0c;由专门的EHS机构去为公司…