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

包装类+初识泛型

目录

1 .包装类

1.1 基本数据类型对应的包装类

1.2.1装箱

​1.2.2拆箱

 2.初识泛型

2.1什么是泛型

 2.2泛型类

2.3裸类型

 2.4泛型的上界

2.5泛型方法


1 .包装类

基本数据类型所对应的类类型

Java 中,由于基本类型不是继承自 Object ,为了在泛型代码中可以支持基本类型, Java 给每个基本类型都对应了 一个包装类型。

1.1 基本数据类型对应的包装类

基本数据类型
包装类
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
char
Character
boolean
Boolean
除了 Integer 和 Character, 其余基本类型的包装类都是首字母大写

1.2 装箱和拆箱

1.2.1装箱

(1)自动装箱
int a=100;
Integer val=a;
System.out.println(val);(2)显示装箱
Integer integer1 = new Integer(a);
System.out.println(integer1);
Integer integer2 = Integer.valueOf(a);
System.out.println(integer2);
自动装箱 Integer val=a;本质就是Integer.valueOf(a)

 1.2.2拆箱

(1)自动拆箱
Integer val=100;
int a=val;
System.out.println(a);(2)显示拆箱
int a2=val.intValue();
System.out.println(a2);

 自动拆箱int a=val本质就是val.intValue()

 而且可以拆箱成各种类型

理解加深 

 

public static void main ( String [] args ) {
Integer a = 127 ;
Integer b = 127 ;
Integer c = 128 ;
Integer d = 128 ;
System . out . println ( a == b );
System . out . println ( c == d );
}

运行结果:

 

 解析:

总结:装箱的整形在-128到127之间返回的引用相同。 


 2.初识泛型

一般的类和方法,只能使用具体的类型: 要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的 代码,这种刻板的限制对代码的束缚就会很大。

2.1什么是泛型

就是适用于许多许多类型 。从代码上讲,就是对类型实现了参数化。
泛型的主要目的:
就是指定当前的容器,要持有什么类型的对象。让编译 器去做检查。 此时,就需要把类型,作为参数传递。需要什么类型,就传入什么类型。

 2.2泛型类

语法
class 泛型类名称 < 类型形参列表 > {
// 这里可以使用类型参数
}
class ClassName < T1 , T2 , ..., Tn > {
}

泛型类的使用 

泛型类 < 类型实参 > 变量名 ; // 定义一个泛型类引用
new 泛型类 < 类型实参 > ( 构造方法实参 ); // 实例化一个泛型类对象

MyArray<Integer> list = new MyArray<Integer>();  

使用举例:

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

代码(2-1)如下:

class MyArray<T> {
public T[] array = (T[])new Object[10];//1
public T getPos(int pos) {
return this.array[pos];
}
public void setVal(int pos,T val) {
this.array[pos] = val;
}
}

 对于泛型的进一步补充:

1. 类名后的 <T> 代表占位符,表示当前类是一个泛型类
【规范】类型形参一般使用一个大写字母表示,常用的名称有:

 

2.,不能new泛型类型的数组

 

代码(2-1)T[] array = (T[])new Object[10];是否就足够好,答案是未必的。

我们可以参考官方代码:

改造 代码(2-1)

class MyArray<T> {public Object[] array = new Object[10];//1public T getPos(int pos) {return (T)array[pos];}public void setVal(int pos,T val) {this.array[pos] = val;}
}

2.3裸类型

裸类型是一个泛型类但没有带着类型实参,例如 MyArrayList 就是一个裸类型

MyArray list = new MyArray ();

为什么有这样的写法呢?

泛型在编译的过程当中 存在擦除机制(以代码(2-1)为例

所有的E替换为Object 这种机制,我们称为: 擦除机制
Java的泛型机制是在编译级别实现的。编译器生成的字节码在运行期间并不包含泛型的类型信息。

avap -c 查看字节码文件,所有的E都是Object。 

泛型类的使用时我们给的类型实参主要起两个作用:

(1)存储数据的时候,可以帮我们进行自动的类型检查

(2)获取数据的时候,可以帮我们进行类型转换

 2.4泛型的上界

 在定义泛型类时,有时需要对传入的类型变量做一定的约束,可以通过类型边界来约束。

语法:

写法1.

class 泛型类名称 < 类型形参 extends 类型边界 > {
...
}
public class MyArray < E extends Number > {
...
}
只接受 Number 的子类型作为 E 的类型实参
写法2.
public class MyArray < E extends Comparable < E >> {
...
}

E必须是实现了Comparable接口的

举例:

写一个类,可以传入多种类型的数组,返回其中的最大值。

写法1:

 写法2:

 正确代码:

public class Text2 {public static <E extends Comparable<E>>  E Max(E[]arr) {E ret = arr[0];for (int i = 1; i < arr.length; i++) {if (ret.compareTo(arr[i]) < 0) {ret = arr[i];}}return ret;}

2.5泛型方法

定义语法
方法限定符 < 类型形参列表 > 返回值类型 方法名称 ( 形参列表 ) { ... }

示例

public class Text2 {public static <E extends Comparable<E>>  E Max(E[]arr) {E ret = arr[0];for (int i = 1; i < arr.length; i++) {if (ret.compareTo(arr[i]) < 0) {ret = arr[i];}}return ret;}public static void main(String[] args) {Integer[] arr={6,2,3,4,1000,1};System.out.println(Max(arr));}
}

使用示例-可以类型推导  

写在main方法中
Integer [] a = { ... };
Max ( a );
String [] b = { ... };
Max ( b );

 使用示例-不使用类型推导

Integer [] a = { ... };
Util . < Integer > Max ( a );
String [] b = { ... };
Util . < String > Max ( b );

以上为我个人的小分享,如有问题,欢迎讨论!!! 

都看到这了,不如关注一下,给个免费的赞 

 

相关文章:

包装类+初识泛型

目录 1 .包装类 1.1 基本数据类型对应的包装类 1.2.1装箱 ​1.2.2拆箱 2.初识泛型 2.1什么是泛型 2.2泛型类 2.3裸类型 2.4泛型的上界 2.5泛型方法 1 .包装类 基本数据类型所对应的类类型 在 Java 中&#xff0c;由于基本类型不是继承自 Object &#xff0c;为了在泛型…...

基于改进的长短期神经网络电池电容预测,基于DBN+LSTM+SVM的电池电容预测

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 基于长短期神经网络LSTM的客电池电容预测 完整代码: 基于长短期神经网络LSTM的公交站客流量预测资源-CSDN文库 https://download.csdn.net/download/abc991835105/88184734 效果图 结果分析 展望 参考论文 背影 为增加电动车行…...

Python 2.x 中如何使用pandas模块进行数据分析

Python 2.x 中如何使用pandas模块进行数据分析 概述: 在数据分析和数据处理过程中&#xff0c;pandas是一个非常强大且常用的Python库。它提供了数据结构和数据分析工具&#xff0c;可以实现快速高效的数据处理和分析。本文将介绍如何在Python 2.x中使用pandas进行数据分析&am…...

获取Spring中bean工具类

获取Spring中bean工具类 工具类 package com.geekmice.springbootselfexercise.utils;import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org…...

【实战篇】亿级高并发电商项目(新建 ego_pojo、ego_mapper、ego_api、ego_provider、搭建后台项目 )十五

目录 八、 搭建 Provide 1 新建 ego_pojo 2 新建 ego_mapper 2.1编写 pom.xml 2.2新建配置文件 ​编辑...

【Plex】FRP内网穿透后 App无法使用问题

能搜索到这个文章的&#xff0c;应该都看过这位同学的分析【Plex】FRP内网穿透后 App无法使用问题_plex frp无效_Fu1co的博客-CSDN博客 这个是必要的过程&#xff0c;但是设置之后仍然app端无法访问&#xff0c;原因是因为网络端口的问题 这个里面的这个公开端口&#xff0c;可…...

[管理与领导-11]:IT基层管理者 - 目标与落实 - 过程管理失控,结果总难达成的问题思考:如何把过程管控做得更好?

目录 前言&#xff1a; 第1章 问题与现象 1.1 总有意想不到的事发生&#xff1a;意外事件 1.2 总有计划变更&#xff1a;意外影响 1.3 总有一错再错&#xff0c;没有复盘、总结与反思&#xff0c;没有流程与改进 第2章 背后的原因 2.1 缺乏及时的过程检查 - 缺乏异常检测…...

用php语言写一个chatgpt3.5模型的例子

当然可以&#xff01;使用PHP语言调用OpenAI API与ChatGPT-3.5模型进行交互。首先&#xff0c;确保你已经安装了PHP 7.2或更新版本&#xff0c;并具备可用的OpenAI API密钥。 下面是一个基本的PHP示例&#xff0c;展示了如何使用OpenAI API与ChatGPT-3.5模型进行对话&#xff…...

PHP实现保质期计算器

1.php实现保质期计算&#xff0c; 保质期日期可选&#xff0c;天 、月、年 2. laravel示例 /*** 保质期计算器* return void*/public function expirationDateCal(){$produce_date $this->request(produce_date); // 生产日期$warranty_date $this->reques…...

【独立版】新零售社区团购电商系统生鲜水果商城兴盛优选十荟团源码

【独立版】新零售社区团购电商系统生鲜水果商城兴盛优选十荟团源码...

C++系列十:其他-1. Lua

系列文章目录 Lua 系列文章目录前言Lua介绍&#xff1a;参考链接&#xff1a; 基本语法&#xff1a;函数、迭代器table、userdata、模块元素、元方法&#xff1a;协程、文件读写面向对象、垃圾回收 前言 我写这个博客的一个问题&#xff1f;(●’◡’●) 居然是 取名太难了。 …...

不知道打仗之害,就不知道打仗之利

不知道打仗之害&#xff0c;就不知道打仗之利 【安志强趣讲《孙子兵法》第7讲】 【原文】 夫钝兵挫锐&#xff0c;屈力殚货&#xff0c;则诸侯乘其弊而起&#xff0c;虽有智者&#xff0c;不能善其后矣。 【注释】 屈力殚货&#xff1a;屈力&#xff0c;指力量消耗&#xff0c;…...

【leetcode】242. 有效的字母异位词(easy)

给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 思路&#xff1a; 先比较两字符串长度是否相同&#xff0c;如果不同直接返回false。创建…...

Windows电脑快速搭建FTP服务教程

FTP介绍 FTP&#xff08;File Transfer Protocol&#xff09;是一种用于在计算机网络上进行文件传输的标准协议。它提供了一种可靠的、基于客户端-服务器模型的方式来将文件从一个主机传输到另一个主机。在本文中&#xff0c;我将详细介绍FTP的工作原理、数据传输模式以及常见…...

Arduino驱动MQ2模拟烟雾传感器(气体传感器篇)

目录 1、传感器特性 2、硬件原理图 3、控制器和传感器连线图 4、驱动程序 MQ2气体传感器,可以很灵敏的检测到空气中的烟雾、液化气、丁烷、丙烷、甲烷、酒精、氢气等气体,与Arduino结合使用,可以制作火灾烟雾报警、液化气、丁烷、丙烷、甲烷、酒精、氢气气体泄露报警等相…...

常见分布式ID解决方案总结:数据库、算法、开源组件

常见分布式ID解决方案总结 分布式ID分布式ID方案之数据库数据库主键自增数据库号段模式Redis自增MongoDB 分布式ID方案之算法UUIDSnowflake(雪花算法) 雪花算法的使用IdWorker工具类配置分布式ID生成器 分布式ID方案之开源组件uid- generator(百度)Tinyid&#xff08;滴滴&…...

记录--Loading 用户体验 - 加载时避免闪烁

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 在切换详情页中有这么一个场景&#xff0c;点击上一条&#xff0c;会显示上一条的详情页&#xff0c;同理&#xff0c;点击下一条&#xff0c;会显示下一条的详情页。 伪代码如下所示&#xff1a; 我们…...

系统架构设计专业技能 · 软件工程之软件测试与维护(六)【系统架构设计师】

系列文章目录 系统架构设计专业技能 网络规划与设计&#xff08;三&#xff09;【系统架构设计师】 系统架构设计专业技能 系统安全分析与设计&#xff08;四&#xff09;【系统架构设计师】 系统架构设计高级技能 软件架构设计&#xff08;一&#xff09;【系统架构设计师…...

基于亚奈奎斯特采样和SOMP算法的平板脉冲响应空间插值matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...................................................................... %fine regular gr…...

柏睿向量数据库Rapids VectorDB赋能企业级大模型构建及智能应用

ChatGPT的问世,在为沉寂已久的人工智能重新注入活力的同时,也把长期默默无闻的向量数据库推上舞台。今年4月以来,全球已有4家知名向量数据库公司先后获得融资,更加印证了向量数据库在AI大模型时代的价值。 什么是向量数据库? 在认识向量数据库前,先来了解一下最常见的关…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

06 Deep learning神经网络编程基础 激活函数 --吴恩达

深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

什么是VR全景技术

VR全景技术&#xff0c;全称为虚拟现实全景技术&#xff0c;是通过计算机图像模拟生成三维空间中的虚拟世界&#xff0c;使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验&#xff0c;结合图文、3D、音视频等多媒体元素…...