Java 基本类型和包装类

Java 是基于对象的,所以我们都需要以对象的想法来进行思维。

但 Java 又提供了 8 个基本类型,这 8 个基本类型基本上都和数字有关,是直接可以使用的类型。

基本类型大小包装器类型
boolean/Boolean
char16bitCharacter
byte8bitByte
short16bitShort
int32bitInteger
long64bitLong
float32bitFloat
double64bitDouble
void/Void

String 不算基本类型,但是为了加快 String 的处理,Java 就顺手搞了一个 String Pool。

Java 基本类型

什么是基本类型?

直接可以计算的就是基本类型,基本类型不是对象。

所有的基本数据类型的大小(所占用的字节数)都已明确规定,在各种不同的平台上保持不变,这一特性有助于提高 Java 程序的可移植性。

基本类型就是已经定义好的,可以直接拿来计算和比较的那种。

包装类

既然我们有了基本类型,正如前面说的,Java 里面都是对象。

那么我们应该有必要创建一堆对象和前面说的 8 个基本类型进行对应。

这些对象就是针对基本类型创建的包装类( Wrapper Classes)。

为什么要有包装类

举个例子,我们指定 List 中需要存一堆 Integer 的对象。

如果我们定义的是基本类型,那我们怎么存到对象中呢?

我们是不是需要把基本类型转换为对象,然后再存进去,如果我们不提供包装类的话,就没有这个转换过程。

往大了说,基本数据类型没有办法使用 List 这个数据结构,这多无聊呀。

为了解决这个问题 Java 就搞了一个包装类,用来把基本数据类型转换为对象。

装箱和拆箱

既然东西有了,那么对这个转换的过程,自然就需要定义下概念了。

从基本数据类型类型转换为包装对象的过程就叫做装箱。

反过来就叫做拆箱了。

在老的 JDK ,这个过程都没有办法自动进行操作,每次要手动搞了一个类型转换。

其实这个过程每次都手动做的话,是非常繁琐的,所以在 JDK 进化后,现在全是自动化了,基本上都是自动类型转换了。

虽然有时候也会出点类型转换错误,但整体上提高了不少效率。

简单来说就是 JDK 在需要基本类型的时候,你定义却是对象,那么 JDK 自己帮你把这个拆箱过程给完成了,对你来说是透明的了。

缓存

既然有了装箱和拆箱的过程,如何提高这个效率,就是 JDK 需要考虑的东西了。

在这个过程中,缓存就被使用上了。

Integer valueOf(1); 就是用了缓存的典型例子。

JDK 的代码是这样的:

2023-09-12_10-18-08

    @IntrinsicCandidatepublic static Integer valueOf(int i) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);}

在这里,JDK 定义了一个最小值和最大值以便于加快类型转换的处理速度。

2023-09-12_10-18-51

所以,下面的代码就有点意思了。

        Integer i1 = 100;Integer i2 = 100;Integer i3 = 200;Integer i4 = 200;System.out.println(i1==i2);System.out.println(i3==i4);

上面代码的结果是第一个判断为 TRUE,第二个为 False。

因为我们知道,对象使用 == 进行比较,比较的是内存地址,所以对值的比较我们通常会用 equals 来进行比较。

但是因为上面代码中的 Integer 小于 100,所以是从缓存中读的,这样会导致比较的时候返回 TRUE。

总结

在面试的时候,上面缓存中的内容是容易被喜欢扣细节的人问到的。

如果你真没有去看看 JDK 的文档,上面还真有点出问题。

但我们认为这个有点钻牛角尖的意思了,因为 Java 使用缓存的目的就是为加快程序的执行的。至于具体怎么实现,对大部分人来说这部分都是透明的。

通常实际编程的过程中,只需要了解自动拆装,并且如何定义变量,因为针对对象的定义和基本类型的定义是不一样的。

定义一个浮点对象,我们使用的代码是 Float x = 1F; ,在后面需要添加一个 F。

至于缓存部分,有时间就研究下,了解自动拆装是有缓存在里面,多是针对小范围 int 来使用的就可以了。

Java 基本类型和包装类 - Java - iSharkFly

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

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

相关文章

712. 两个字符串的最小ASCII删除和 -- 动规

712. 两个字符串的最小ASCII删除和 class MinimumDeleteSum:"""712. 两个字符串的最小ASCII删除和https://leetcode.cn/problems/minimum-ascii-delete-sum-for-two-strings/"""def solution(self, s1: str, s2: str) -> int:""&qu…

C#下使用IronPython来实现热更新

问题 之前我们学习过Roslyn&#xff0c;他可以动态编译代码并运行&#xff0c;然后通过ALC加载即插即用&#xff0c;但是遇到一些问题感觉无法解决&#xff0c;我编写一个类A在ALC中&#xff0c;另外一个类B要实例化这个A&#xff0c;我想让他们都能灵活卸载&#xff0c;但是如…

wireshark通常无法抓取交换机所有端口报文

Wireshark 是一种网络分析工具&#xff0c;它通常在计算机的网络接口上进行数据包捕获和分析。然而&#xff0c;Wireshark 默认情况下无法直接捕获交换机所有端口的报文。 交换机是一种网络设备&#xff0c;它在局域网内转发数据包&#xff0c;根据目的MAC地址将数据包仅发送到…

使用mybatis批量插入数据

最近在做项目的时候&#xff0c;有些明细数据&#xff0c;一条一条的插入太费资源和时间&#xff0c;所以得需要批量插入&#xff0c;今晚闲来无事写个小demo。 新建工程 <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis…

「程序员必须掌握的算法」字典树「上篇」

「程序员必须掌握的算法」字典树「上篇」 前言: 在计算机科学中&#xff0c;字典树&#xff08;Trie&#xff09;是一种有序树&#xff0c;用于保存关联数组&#xff08;有时我们称之为“映射”或“字典”&#xff09;。与二叉查找树不同&#xff0c;键不是直接保存在节点中&am…

vue 知识点———— 生命周期

1.什么是生命周期 Vue实例从创建到销毁的过程&#xff0c;叫生命周期。 从开始创建、初始化数据、编译模版、挂载Dom-渲染、更新-渲染、销毁等过程。 2.生命周期一共有几个阶段 创建前/后, 载入前/后,更新前/后,销毁前/销毁后 3.初始化相关属性 beforeCreate&#xff08;创建前…

网络摄像头-流媒体服务器-视频流客户端

取电脑的视频流 当涉及交通事件检测算法和摄像头视频数据处理时&#xff0c;涉及的代码案例可能会非常复杂&#xff0c;因为这涉及到多个组件和技术。以下是一个简单的Python代码示例&#xff0c;演示如何使用OpenCV库捕获摄像头视频流并进行实时车辆检测&#xff0c;这是一个…

您的计算机已被[new_day@torguard.tg].faust 勒索病毒感染?恢复您的数据的方法在这里!

导言&#xff1a; 随着科技的迅速发展&#xff0c;网络空间也变得越来越危险&#xff0c;而勒索病毒则是网络威胁中的一个严重问题。 [ new_daytorguard.tg ].faust 勒索病毒是最新的威胁之一&#xff0c;采用高度复杂的加密技术&#xff0c;将受害者的数据文件锁定&#xff0c…

基于腾讯文档进行应届生个人求职记录

1. 新建一个腾讯文档 电脑登录QQ&#xff0c;点击“腾讯文档”功能键。 2. 可以选择下载客户端&#xff0c;也可以直接进入网页版。&#xff08;本人使用网页版&#xff09; 3. 点击新建&#xff0c;选择在线表格。 4. 编辑表名&#xff0c;表内容。 5. 设置文档权限&#xf…

性能测试工具LoadRunner —— 性能测试流程及结果分析

性能测试目的 1 什么是性能测试? 性能测试是通过性能的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。 负载测试和压力测试都属于性能测试&#xff0c;两者可以结合进行。通过负载测试&#xff0c;确定在各种工作负载下系统的性能&#xff0…

机器学习笔记之最优化理论与方法(七)无约束优化问题——常用求解方法(上)

机器学习笔记之最优化理论与方法——基于无约束优化问题的常用求解方法[上] 引言总体介绍回顾&#xff1a;线搜索下降算法收敛速度的衡量方式线性收敛范围高阶收敛范围 二次终止性朴素算法&#xff1a;坐标轴交替下降法最速下降法(梯度下降法)梯度下降法的特点 针对最速下降法缺…

不关闭Tamper Protection(篡改保护)下强制卸载Windows Defender和安全中心所有组件

个人博客: xzajyjs.cn 背景介绍 由于微软不再更新arm版本的win10系统&#xff0c;因此只能通过安装insider preview的镜像来使用。而能找到的win10 on arm最新版镜像在安装之后由于内核版本过期&#xff0c;无法打开Windows安全中心面板了&#xff0c;提示如下&#xff1a; 尝…

mysql技术文档--之与redo log(重做日志)庖丁解析-超级探索!!!

阿丹&#xff1a; 在刚开始写本文章的是还不太清楚要如何去细啃下这两个体系&#xff0c;在查阅资料的过程中。发现大厂阿里的庖丁解InnoDB系列&#xff0c;详细了的写了很多底层知识&#xff0c;于是基于这个这两个文章才有了阿丹的这篇文章。 整体认知&#xff1a; 在 MySQ…

分享一个python基于数据可视化的智慧社区服务平台源码

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人七年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、微信小程序、爬虫、大数据等&#xff0c;大家有这一块的问题可以一起交流&#xff01; &#x1…

AI项目六:WEB端部署YOLOv5

若该文为原创文章&#xff0c;转载请注明原文出处。 一、介绍 最近接触网页大屏&#xff0c;所以就想把YOLOV5部署到WEB端&#xff0c;通过了解&#xff0c;知道了两个方法&#xff1a; 1、基于Flask部署YOLOv5目标检测模型。 2、基于Streamlit部署YOLOv5目标检测。 代码在…

mt7981支持leds驱动 - 修改5g led为普通led

一. 前言 由于工作中需要驱动mt7981的gpio&#xff0c;所以研究了下怎么使用mt7981的leds驱动子系统&#xff0c;记录如下文。 二. 将5g wifi灯复用为普通GPIO 1. 查看drivers/pinctrl/mediatek/pinctrl-mt7981.c static const struct group_desc mt7981_groups[] { ....../…

android 10 wifi操作

android 10及以上wifi发生了变化&#xff0c;android 10及以下代码需要适配。 android 10及以上&#xff1a; 1.权限&#xff1a; <uses-permission android:name"android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name"androi…

GPT 内部 — I : 了解文本生成

年轻的陀思妥耶夫斯基被介绍给生成AI&#xff0c;通过Midjourney创建 一、说明 我经常与不同领域的同事互动&#xff0c;我喜欢向几乎没有数据科学背景的人传达机器学习概念的挑战。在这里&#xff0c;我试图用简单的术语解释 GPT 是如何连接的&#xff0c;只是这次是书面形式。…

Windows安装Neo4j

图数据库概述 图数据库是基于图论实现的一种NoSQL数据库&#xff0c;其数据存储结构和数据查询方式都是以图论&#xff08;它以图为研究对象图论中的图是由若干给定的点及连接两点的线所构成的图形&#xff09;为基础的&#xff0c; 图数据库主要用于存储更多的连接数据。 Neo…

Java集合(Collection、Iterator、Map、Collections)概述——Java第十三讲

前言 本讲我们将继续来讲解Java的其他重要知识点——Java集合。Java集合框架是Java编程语言中一个重要的部分,它提供了一套预定义的类和接口,供程序员使用数据结构来存储和操作一组对象。Java集合框架主要包括两种类型:一种是集合(Collection),存储一个元素列表,…