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

新数据结构(8)——包装类

基本数据类型(轻点)

Java基本数据类型在内存中占用固定的大小,并且直接存储值,而不是对象的引用

整数类型

byte:8位,存储范围从-128到127

short:16位,存储范围从-32,768到32,767

int:32位,存储范围从-231-1,即-2,147,483,648到2,147,483,647。这是最常用的整数类型

long:64位,存储范围从-263-1。在数值后面加上Ll表示这是一个long类型的值

浮点类型

float:32位,单精度浮点数。在数值后面加上Ff表示这是一个float类型的值

double:64位,双精度浮点数。这是最常用的浮点数类型

字符类型

char:16位,存储Unicode字符。字符字面量用单引号括起来,例如'A'

布尔类型

boolean:表示真(true)或假(false

引用数据类型(轻点)

数组、类、接口

数组是一种可以存储多个相同类型数据的容器,它在内存中是连续存储的使用new关键字:int[] arr = new int[5];,表示创建一个长度为5的整型数组。直接初始化:int[] arr = {1, 2, 3, 4, 5};

类是Java中定义对象的模板,它封装了数据和操作这些数据的方法。类可以包含成员变量(属性)和成员方法(行为)。类支持继承、封装和多态等面向对象的特性。类是引用类型,通过new关键字创建对象实例,对象存储在堆内存中。定义一个类:public class Person { String name; int age; }。创建对象实例:Person person = new Person();

接口是一种特殊的引用数据类型,它定义了一组方法规范,但不提供具体实现。接口中的方法默认是public abstract,成员变量默认是public static final。从JDK 8开始,接口可以包含默认方法和静态方法。接口支持多继承,一个类可以实现多个接口。定义接口:public interface USB3 { void in(); void out(); }。实现接口:public class USBDevice implements USB3 { public void in() { ... } public void out() { ... } }。接口用于定义对象的行为规范,允许不同的类实现相同的接口,从而实现多态。

包装类的引入(中点)

对象的基本概念:对象是类的实例化,是堆内存中的一块内存空间。

在Java编程语言中,尽管很多概念都可以被视作对象来处理,但基本数据类型本身并不直接对应对象。为了弥补这一不足,并使基本数据类型能够像对象一样被操作,Java引入了包装类。这些包装类将基本数据类型封装在对象内部,从而允许基本数据类型以对象的形式存在和操作

基本数据类型和其对应包装类

如下图所示,基本数据类型byte的变量无法指向空值(null),因为它不是指针类型,而是直接存储数据值。相反,Byte作为byte的包装类,其对象可以指向空值(null),这证明了包装类Byte并不是基本数据类型,而是Java提供的一种将基本数据类型封装为对象的机制

128陷阱(重点)

128陷阱是Java编程语言中Integer类的一个特有现象,具体体现在当进行自动装箱时,数值-128到127之间的整数会被缓存并重用,而超出此范围的数值则不会,下图具体展示了这一陷阱的体现:

在创建对象时,通常需要为新对象开辟独立的内存空间。然而,Java的Integer类的valueOf()方法采用了一种特殊的机制,它预先创建并分配了一个包含-128到127范围内所有整数的数组。当使用valueOf()方法为在此范围内的整数赋值时,该方法会直接从该数组中取出对应的Integer对象,并返回其内存地址供使用,从而避免了不必要的内存分配。相反,如果赋值的整数超出了这个范围,valueOf()方法则会为新的整数值开辟独立的内存空间。这种内存分配方式的具体实现细节如下图所示。在上图中,变量a1和a2之所以相等,是因为它们都被赋值为-128到127范围内的整数,因此valueOf()方法使它们指向了数组中相同的Integer对象地址。而变量a3和a4不相等,则是因为它们被赋值为超出该范围的整数值,valueOf()方法为它们各自开辟了新的内存空间,因此它们指向的是不同的Integer对象地址。

自动拆装箱(重点)

将基本数据类型int转换为对应的包装类Integer的过程被称为装箱

将包装类Integer转换回基本数据类型int的过程则被称为拆箱

int  a = 10;
int  b = 10;
Integer a1 = 10;
Integer b1 = 10;
Integer a2 = new Integer(10);
Integer b2 = new Integer(10);
System.out.println(a == b);
//True  a和b存储的是相同的整数值,且它们都是基本数据类型,直接进行值比较相等
System.out.println(a1 == b1);
//True  由于128陷阱,a1和b1实际上引用的是同一个Integer对象的数组里的相同地址,输出True
System.out.println(a2 == b2);
//False 通过new关键字显式地创建了两个新的Integer对象a2和b2,即使它们的值都是10,但它们是两个不同的对象,存储在内存中的不同位置
System.out.println(a1 == a);
//True  在进行比较时,Java会自动将Integer对象a1拆箱为基本数据类型int的值,然后与基本数据类型int的变量a进行比较
System.out.println(a1.equals(a));
//True  和上面一样是自动拆箱,判断时候Integer要转出int来判断. equals()的底层还是==
System.out.println(a1 == a2);
//False  a1的值10是从catch数据当中获取的  a2的值10是自己创建创建的对象.
System.out.println(a == a2);
//True  自动拆箱,a2是Integer类型的 a是int类型的,判断时候Integer要转出int来判断.

相关文章:

新数据结构(8)——包装类

基本数据类型(轻点) Java基本数据类型在内存中占用固定的大小,并且直接存储值,而不是对象的引用 整数类型 byte:8位,存储范围从-128到127 short:16位,存储范围从-32,768到32,767 …...

P5:使用pytorch实现运动鞋识别

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 我的环境 语言环境:python 3.7.12 编译器:pycharm 深度学习环境:tensorflow 2.7.0 数据:本地数据集-运动鞋 一…...

讲解下SpringBoot中MySql和MongoDB的配合使用

在Spring Boot中,MySQL和MongoDB可以配合使用,以充分发挥关系型数据库和非关系型数据库的优势。MySQL适合处理结构化数据,而MongoDB适合处理非结构化或半结构化数据。以下是如何在Spring Boot中同时使用MySQL和MongoDB的详细讲解。 1. 添加依…...

《手札·行业篇》开源Odoo MES系统与SKF Observer Phoenix API在化工行业的双向对接方案

一、项目背景 化工行业生产过程复杂,设备运行条件恶劣,对设备状态监测、生产数据采集和质量控制的要求极高。通过开源Odoo MES系统与SKF Observer Phoenix API的双向对接,可以实现设备状态的实时监测、生产数据的自动化采集以及质量数据的同步…...

数据结构与算法之数组: LeetCode 905. 按奇偶排序数组 (Ts版)

按奇偶排序数组 https://leetcode.cn/problems/sort-array-by-parity/description/ 描述 给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。 返回满足此条件的 任一数组 作为答案。 示例 1 输入:n…...

【STM32】HAL库Host MSC读写外部U盘及FatFS文件系统的USB Disk模式

【STM32】HAL库Host MSC读写外部U盘及FatFS文件系统的USB Disk模式 在先前 分别介绍了FatFS文件系统和USB虚拟U盘MSC配置 前者通过MCU读写Flash建立文件系统 后者通过MSC连接电脑使其能够被操作 这两者可以合起来 就能够实现同时在MCU、USB中操作Flash的文件系统 【STM32】通过…...

docker nginx 配置文件详解

在平常的开发工作中,我们经常需要访问静态资源(图片、HTML页面等)、访问文件目录、部署项目时进行负载均衡等。那么我们就会使用到Nginx,nginx.conf 的配置至关重要。那么今天主要结合访问静态资源、负载均衡等总结下 nginx.conf …...

如何实现华为云+deepseek?

在华为云上实现跨账号迁移数据或部署DeepSeek模型,可以通过以下步骤完成: 跨账号数据迁移 创建委托:在源账号中创建一个委托(Agency),授予目标账号访问数据的权限。 复制镜像:在源账号中&…...

【学习笔记】计算机网络(三)

第3章 数据链路层 文章目录 第3章 数据链路层3.1数据链路层的几个共同问题3.1.1 数据链路和帧3.1.2 三个基本功能3.1.3 其他功能 - 滑动窗口机制 3.2 点对点协议PPP(Point-to-Point Protocol)3.2.1 PPP 协议的特点3.2.2 PPP协议的帧格式3.2.3 PPP 协议的工作状态 3.3 使用广播信…...

稀土抑烟剂——为汽车火灾安全增添防线

一、稀土抑烟剂的基本概念 稀土抑烟剂是一类基于稀土元素(如稀土氧化物和稀土金属化合物)开发的高效阻燃材料。它可以显著提高汽车内饰材料的阻燃性能,减少火灾发生时有毒气体和烟雾的产生。稀土抑烟剂不仅能提升火灾时的安全性,…...

Qt Pro、Pri、Prf

一、概述 1、在Qt中,通常使用.pro(project)、pri(private include)、prf(project file)三种文件扩展名来组织项目。对于模块化编程,Qt提供了Pro和Pri,Pro管理项目,Pri管理模块。 2、pro文件是Qt项目的核心文件,包含了…...

基于AIOHTTP、Websocket和Vue3一步步实现web部署平台,无延迟控制台输出,接近原生SSH连接

背景:笔者是一名Javaer,但是最近因为某些原因迷上了Python和它的Asyncio,至于什么原因?请往下看。在着迷”犯浑“的过程中,也接触到了一些高并发高性能的组件,通过简单的学习和了解,aiohttp这个…...

如何在MacOS上查看edge/chrome的扩展源码

步骤 进入管理扩展页面点击详细信息复制对应id在命令行键入 open ~/Library/Application Support/Microsoft Edge/Default/Extensions/${你刚刚复制的id} 即可打开访达中对应的更目录 注意 由于原生命令行无法直接处理空格 ,所以需要加转义符\,即:open ~/Librar…...

【xdoj-离散线上练习H】T234(C++)

解题心得: 写递归函数的时候,首先写终止条件,这有助于对整个递归函数的把握。 题目:输入集合A和B,输出A到B上的所有函数。 问题描述 给定非空数字集合A和B,求出集合A到集合B上的所有函数。 输入格式 第一行…...

Docker Desktop Windows 安装

一、先下载Docker desktop WIndows 下载地址 二、安装 安装超简单 一路 下一步 三、安装之后,桌面会出现一个 小蓝鲸图标,打开它 》更新至最新版本,不然小蓝鲸打开,一会就退出了。 》wsl --update (这个有时比较慢…...

springCloud-2021.0.9 之 GateWay 示例

文章目录 前言springCloud-2021.0.9 之 GateWay 示例1. GateWay 官网2. GateWay 三个关键名称3. GateWay 工作原理的高级概述4. 示例4.1. POM4.2. 启动类4.3. 过滤器4.4. 配置 5. 启动/测试 前言 如果您觉得有用的话,记得给博主点个赞,评论,收…...

JDK8 stream API用法汇总

目录 1.集合处理数据的弊端 2. Steam流式思想概述 3. Stream流的获取方式 3.1 根据Collection获取 3.1 通过Stream的of方法 4.Stream常用方法介绍 4.1 forEach 4.2 count 4.3 filter 4.4 limit 4.5 skip 4.6 map 4.7 sorted 4.8 distinct 4.9 match 4.10 find …...

windows生成SSL的PFX格式证书

生成crt证书: 安装openssl winget install -e --id FireDaemon.OpenSSL 生成cert openssl req -x509 -newkey rsa:2048 -keyout private.key -out certificate.crt -days 365 -nodes -subj "/CN=localhost" 转换pfx openssl pkcs12 -export -out certificate.pfx…...

玩转大语言模型——使用Kiln AI可视化环境进行大语言模型微调数据合成

系列文章目录 玩转大语言模型——使用langchain和Ollama本地部署大语言模型 玩转大语言模型——三分钟教你用langchain提示词工程获得猫娘女友 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 玩转大语言模型—…...

2025 西湖论剑wp

web Rank-l 打开题目环境: 发现一个输入框,看一下他是用上面语言写的 发现是python,很容易想到ssti 密码随便输,发现没有回显 但是输入其他字符会报错 确定为ssti注入 开始构造payload, {{(lipsum|attr(‘global…...

在 Linux 中查看文件并过滤空行

在 Linux 中查看文件并过滤空行 在 Linux 中查看文件内容时过滤掉空行有多种方法,以下是几种常用的方法: 方法 1:使用 grep grep -v ^$ filename-v:反转匹配,只显示不匹配的行^$:表示空行的正则表达式&a…...

Redisson简明教程—你家的锁芯该换了

1.简介 各位攻城狮们,你还在使用原生命令来上锁么?看来你还是不够懒,饺子都给你包好了,你非要吃大饼配炒韭菜,快点改善一下“伙食”吧,写代码也要来点幸福感。今天咱们就来聊聊Redisson提供的各种锁&#…...

更新Java的环境变量后VScode/cursor里面还是之前的环境变量

最近我就遇到这个问题,这个一般是安装了多个版本的Java,并设置好环境变量,但VScode/cursor内部环境变量却没有改变 解决办法 打开设置,或者直接快捷键CTRL,搜索Java:Home编辑settings.json文件 把以下部分改为正确的…...

【汇编逆向系列】二、函数调用包含单个参数之整型-ECX寄存器,LEA指令

目录 一. 汇编源码 二. 汇编分析 1. ECX寄存器 2. 栈位置计算​ 3. 特殊指令深度解析 三、 汇编转化 一. 汇编源码 single_int_param:0000000000000040: 89 4C 24 08 mov dword ptr [rsp8],ecx0000000000000044: 57 push rdi0000…...

【Linux 学习计划】-- 系统中进程是如何调度的(内核进程调度队列)

目录 回顾进程优先级与进程调度的引入 内核runqueue图例 关于queue[140]前100个位置 | 实时进程与分时进程 遍历需要调度的进程与bitmap的引入 active、expired指针 结语 回顾进程优先级与进程调度的引入 在我们之前的学习中,我们是有学习过进程优先级这个概…...

PHP 打印扩展开发:从易联云到小鹅通的多驱动集成实践

目前已有易联云WIFI打印机扩展 扩展入口文件 文件目录 crmeb\services\printer\Printer.php namespace crmeb\services\printer;use crmeb\basic\BaseManager; use think\facade\Config; use think\Container;/*** Class Printer* package crmeb\services\auth* mixin \crme…...

压敏电阻的选型都要考虑哪些因素?同时注意事项都有哪些?

压敏电阻,英文名简称VDR,电子元器件中重要的成员之一,是一种非线性伏安特性的电阻器件,有电阻特性的同时,也拥有其他自身的特性,广泛应用于众多领域。在电源系统、安防系统、浪涌抑制器、电动机保护、汽车电…...

基于CNN的OFDM-IM信号检测系统设计与实现

基于CNN的OFDM-IM信号检测系统设计与实现 摘要 本文详细研究了基于卷积神经网络(CNN)的正交频分复用索引调制(OFDM-IM)信号检测方法。通过在不同信噪比(SNR)和信道条件下进行系统仿真,对比分析了CNN检测器与传统最大似然(ML)检测器的误码率(BER)性能和计算复杂度。实验结果表…...

生动形象理解CNN

好的!我们把卷积神经网络(CNN)想象成一个专门识别图像的“侦探小队”,用破案过程来生动解释它的工作原理: 🕵️♂️ 案件:识别一张“猫片” 侦探小队(CNN)的破案流程&am…...

华为OD机试真题——告警抑制(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…...