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

全网最全——Java 数据类型

一、数据类型方法论

程序本质上是对数据的处理(逻辑运算),因此任何语言都需先解决如何表征【数据】这个核心概念。数据作为抽象的概念,天然的包含2个方面属性:

  • 类型:类型决定了数据只能和同类型的数据进行运算才有意义,不同类型的数据必须进行类型转换
  • 数值:是数据的数学意义上的大小或内容。

同时数据保存在内存或磁盘中,总是占用一定的存储空间,因此一个数据在程序中是由类型数值存储空间表示的。

二、Java 数据类型

Java 是一种强类型语言,每个变量在声明时必须指定其数据类型。根据参数传递时的赋值方式,Java 中的数据类型分2类:

1、基本数据类型(值类型)

参数传递时总是以值拷贝的形式,赋值给接收变量。

本质是对数学意义上的纯数值类数据的抽象,因此又叫值类型.

注意: 基本数据类型在语言层面是不可分割的基本单元,但硬件层面并非是不可分割的,因为内存的读写是以内存行(64位)为基本单位的,占用2个或2个以上内存行的数据在高并发下是不安全的。

java-basic-assign.png

2、引用类型

即参数传递时是以拷贝引用地址的方式传递给接收变量,而非复制整个"数据"本体。

除了基本数据类型外的、其他结构化的数据类型,如字符串类型String、或自定义的类(如Person),本质上是对现实世界结构化、关系化数据的抽象,因为一个对象(如人)总是具备多个特征属性的,每个属性都是一个基本数据类型。

为什么不是拷贝值?

这类类型的变量本质上是一段存储空间的起始地址,因为结构化数据的存储空间的大小是由所有属性叠加的,且是可变的,不能或很难实现原子性的拷贝,且空间代价很大,因此参数传递时并不是机械的拷贝所有属性、所有空间,而是仅复制拷贝起始地址就行了,其他字段可以据此基地址和字段顺序进行偏移计算所得。

java-reference-assign.png

3、值类型和引用类型的区别

  • 概念方面

基本类型:变量名指向具体的数值,参数传递会拷贝值的副本,原值不受影响
引用类型:变量名指向存数据对象的内存地址,参数传递是复制内存段的起始地址,最终指向同一内存段。

  • 相等语义

基本类型:使用时需要赋具体值,使用 == 号判断值是否相等。
引用类型:== 是判断引用地址是否相同;通常应重写 equals 方法实现自定义的逻辑,如同一学生会存在多个缓存中,重写equals,根据学号no是否相等判断是否是同一学生。

三、基本数据类型(值类型)

Java 语言共提供了4 类、8 种基本类型

java-value-type

 

1、整数型

是对数学中整数的表达,按照数值范围和存储空间大小顺序:byte < short < int < long

2、浮点型

是对数学中的小数的表达,即有浮动小数点的数,

float - 32 位,直接赋值时必须在数字后加上 f 或 F,指示编译器这是一个float型浮点数
double - 64 位,赋值时一般在数字后加 d 或 D,指示编译器这是一个double型浮点数

3、Unicode 字符型

是对Unicode编码的表达,Unicode编码是对全世界所有主要语言中各类字符、符号的编码,是将文档转存成计算机的二进制序列进行保存的理论基础。

char- 16 位,存储 Unicode 码,用单引号赋值。

java-unicode

 

  • 可计算的

java 提供字符型,可以更方便的表述字符,同时支持基于编码的数值计算,因此char类型的值本质还是数值,可以参与数值计算。

4、布尔型(真假)

是对逻辑运算值的表达,即真True假False

boolean - 只有 true 和 false 两个取值。

  • 非数值

boolean 类型是非数值类型的,因此和其他基本数据类型不能参与计算。

5、最小使用原则

即在满足需求的前提下,优先使用更小的类型,可以节省大量的内存,提升程序的性能。Java每个大类都提高了多个大小不一的类型,即是灵活的需要,更是内存优化的需要。

四、类型转换

正如方法论中所说,不同类型的数据不能直接混合计算,必须转换同一种类型。

Java 中,数据类型转换有两种方式:自动转换强制转换

1、自动隐式转换

在符合下面的规则下,Java编译器会安全的、隐式的进行转换,降低用户手动转换的压力。

  • 自动膨胀原则

即在精度不一致的混合场景下,Java编译器会隐式的将精度较小的类型转换成精度稍大的类型后才进行计算,由小转大,数据精度并不会丢失,因此是安全的。

膨胀的顺序是:byte -> short/char -> int -> long -> float -> double

由下面的例子可以看出,Java编译器不仅自动优化了变量类型,减少了内存,而且自动隐式的将 byte 转换成了 float,整个表达式的最终结果已是float类型

java-int-auto

 

再使用精度较小的int型变量接收时就会提示出错。

java-int-float-error

 

2、强制转换

在不符合自动转换条件时或者根据用户的需要,可以使用符号()对数据类型做强制的转换。

注意!!!:从精度大到精度小的强制转换,因为存储空间也会缩小一半,因此存在数据出错的不确定性问题,用户自身需要自我承担这样的风险。

可以看到虽然编译阶段是正常的,没有提示错误,但是运行时的结果却是一个不确定的数据,而不是预期的。

java-force-convert-lost

 

五、装箱和拆箱

为了基本数据类型可以与引用类型互相转换,以利用彼此的特性,Java 为每一种基本数据类型提供了相应的包装(封装)类。

java-basic-wrapper

1、包装类和享元模式

Java基本数据类型的包装类以value字段保留其对应的数值,如Integer#value,可以通过构造器或者valueof方法生成新的包装对象实例。

  • 享元模式(即缓存池模式)

因为在堆中创建新的对象是相对比较重的操作,同时基本数据类型的自动装箱又是程序中最常见的情况之一,因此为为避免重复创建这些常用的对象,Jdk实现的基本类型包装类基本都会采用缓存池的设计,即享元模式,数量由jvm参数XX:AutoBoxCacheMax指定。

饥饿池化 - 包装类在首次加载时会对指定小范围内的数值进行饥饿式池化,如java.lang.Integer.IntegerCache.high指定

懒加载池化 - 对每个首次使用的其他数值进行懒加载池化和替换

享元模式是非常重要的设计模式一直,对内存优化和系统系统方面都是非常友好的。

java-integer-wrapper

 

2、装箱(boxing)

即将基本数据类型转换为对应封装类的引用类型,目的是获得对应封装类的各类方法的能力。例如:int 转 Integer,编译器是通过调用包装类的 valueOf 方法实现的。

  • 自动装箱(auto boxing)

当基本数据类型赋值给对应包装类的引用类型时,Java会自动的将基本数值类型通过其包装类的valueOf,在堆上创建其对应的包装类对象。

java-auto-boxing

3、拆箱(unboxing)

是将封装类的引用类型转换为基本数据类型,例如:Integer 转 int,目的是可以参与常规的数学运算。本质是编译器通过调用包装类的 xxxValue 方法实现的。(xxx 代表对应的基本数据类型)

  • 自动拆箱(auto unboxing)

当包装类与基本数据类型混合运算时,Java会调用该包装类的xxxValue获得对应的值类型的值,然后才参与表达式的计算。

java-auto-unboxing

六、总结

最后整理了一个完整的脑图。

java数据类型

相关文章:

全网最全——Java 数据类型

一、数据类型方法论 程序本质上是对数据的处理&#xff08;逻辑运算&#xff09;&#xff0c;因此任何语言都需先解决如何表征【数据】这个核心概念。数据作为抽象的概念&#xff0c;天然的包含2个方面属性&#xff1a; 类型&#xff1a;类型决定了数据只能和同类型的数据进行…...

数据结构基础之动态数组

目录 前言 1、Java中的数组 2、实现动态数组 2.1、基本类结构设计 2.2、添加元素 2.3、查询&修改元素 2.4、包含&搜索&删除 2.5、数组扩容 前言 今天我们来学习一下关于数据结构的一些基础知识&#xff0c;数据结构研究的是数据如何在计算机中进行组织和存…...

【跟我一起读《视觉惯性SLAM理论与源码解析》】第九章 地图点、关键帧以及图结构

这一章主要讲了一些基本内容&#xff0c;包括ORB-SLAM2中地图点&#xff0c;关键帧图结构的问题 地图点和特征点的关系&#xff1f;有时候地图点对应不同帧上的特征点&#xff0c;特征点可以通过三角化得到地图点地图点的几个属性&#xff0c;平均观测方向&#xff0c;以及观测…...

网络安全——数据链路层安全协议(2)

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.局域网数据链路层安全协议 1.IEEE 802.10 &#xff08;1&#xff09;IEE…...

【华为OD机试模拟题】用 C++ 实现 - 热点网络统计(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明热点网络统计【华为OD机试模拟题】题目输入输出描述示例一输入输出示例二输入输出Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出…...

人工智能学习07--pytorch09--LeNet

参考&#xff1a; 视频&#xff1a; https://www.bilibili.com/video/BV187411T7Ye/?spm_id_from333.999.0.0&vd_sourceb425cf6a88c74ab02b3939ca66be1c0d 博客&#xff1a;https://blog.csdn.net/STATEABC/article/details/123661612?utm_mediumdistribute.pc_feed_404.…...

java泛型编程初识

java泛型编程初识1.泛型解决的是什么问题2.泛型实例化语句3.自定义泛型1)自定义泛型类或接口2)自定义泛型方法4.泛型使用中的继承和通配1)通配2)继承使用限制1.泛型解决的是什么问题 很多类、接口、方法中逻辑相同&#xff0c;只是操作的对象类型不同&#xff0c;这个时候就可…...

代码随想录算法训练营 || 贪心算法 1005 134 135

Day291005.K次取反后最大化的数组和力扣题目链接给定一个整数数组 A&#xff0c;我们只能用以下方法修改该数组&#xff1a;我们选择某个索引 i 并将 A[i] 替换为 -A[i]&#xff0c;然后总共重复这个过程 K 次。&#xff08;我们可以多次选择同一个索引 i。&#xff09;以这种方…...

Spring框架面试题

springboot的自动装配原理 主类上的SpringBootApplication存在EnableAutoConfiguration&#xff0c;EnableAutoConfiguration会导入AutoConfigurationImportSelector组件&#xff0c;其AutoConfigurationImportSelector$AutoConfigurationGroup#process()方法会读取当前应用所有…...

纯x86汇编实现的多线程操作系统实践 - 第五章 AP的守护执行

AP的32位保护模式代码的后半部分从0x8001C000开始执行&#xff0c;完成的工作主要有&#xff1a;初始化必要的中断给BSP发送启动成功的消息创建各AP的系统进程创建各AP的用户进程循环显示各AP中用户进程执行的时间比例5.1 初始化中断5.1.1总体初始化各AP调用init_interrupt_fun…...

2023年全国最新高校辅导员精选真题及答案7

百分百题库提供高校辅导员考试试题、辅导员考试预测题、高校辅导员考试真题、辅导员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 71.在北京曾经发现一处战国时期的遗址&#xff0c;从中出土了燕、韩、赵、魏等国铸币3876…...

使用windwow windbg 吃透64位分页内存管理

前言 分页基础概念是操作系统基础知识&#xff0c;网上已经有太多太多了。所以本文记录使用windwow内核调试工具验证理论知识。 具体可以参阅intel volume3的 4.1.1 Four Paging Modes章节。 简而言之&#xff1a;CR0.PG 0表示不开启分页.并且根据CR4各种标志开启不同类别的…...

Java知识复习(五)JVM虚拟机

1、虚拟机的自动内存管理和C/C的区别 C/C开发程序时需要为每一个new操作去写对应的delete/free操作&#xff0c;不容易出现内存泄漏和溢出问题。而Java程序将内存控制权交给了Java虚拟机 2、JVM的运行机制 1、Java程序的具体运行过程如下&#xff1a; Java源文件被编译器编…...

房屋出租管理系统

1. 铺垫 1.1 项目真实开发的过程 上来要做什么&#xff1f;&#xff1f;&#xff1f;&#xff1f; 有电脑—》配环境&#xff08;JDK、IDEA、MAVEN……&#xff09; 这个项目&#xff1a;房屋管理系统 从什么角度出发&#xff0c;第一步做什么&#xff1f;&#xff1f; 架构 …...

2023年全国最新食品安全管理员精选真题及答案6

百分百题库提供食品安全管理员考试试题、食品安全员考试预测题、食品安全管理员考试真题、食品安全员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 51.制定《中华人民共和国食品安全法》的目的是为了保证食品安全&#xf…...

C++中的文件操作

文件操作 所有数据程序运行结束后都会释放通过文件可以将数据持久化头文件文件类型分为两种 文本文件—文件以文本的ASCII码形式存储在计算机中二进制文件—文件以文本的二进制存储在计算机中 操作文件的三大类 ofstream—写操作ifstream—读操作fstream—读写操作 文本文件 写…...

监控生产环境中的机器学习模型

简介 一旦您将机器学习模型部署到生产环境中&#xff0c;很快就会发现工作还没有结束。 在许多方面&#xff0c;旅程才刚刚开始。你怎么知道你的模型的行为是否符合你的预期&#xff1f;下周/月/年&#xff0c;当客户&#xff08;或欺诈者&#xff09;行为发生变化并且您的训练…...

15s了解什么是物联网技术

目录 15s了解什么是物联网技术 15s了解什么是物联网技术 什么是物联网技术。 简单地说,物联网就是把所有的物体连接起来,相互作用,形成一个互联互通的网络,这就是物联网。如果说互联网是我们身体的虚拟大脑,那么物联网就是我们身体的感知系统,就像眼睛和耳朵-样,让我们…...

敲出来的真理-mysql备份大全,备份命令,还原命令,定时备份

mysqldump命令全量备份数据全量标准语句格式mysqldump -h主机名 -P端口 -u用户名 -p密码 –database 数据库名 > 文件名.sql 1.备份全部数据库的数据和结构mysqldump -uroot -p123456 -A > /data/mysqlDump/mydb.sql2.备份全部数据库的结构&#xff08;加 -d 参数&#x…...

ATTCK实战系列-红队评估(一)

from ATT&CK实战系列-红队评估(一) 环境搭建 下载地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/2/ 将三个虚拟机启动起来 除了windows 7那个主机&#xff0c;其他都只设置成仅主机模式 windows 7添加两个网卡&#xff0c;一个是仅主机&#xff0c;一个是NAT …...

学python的第二天---差分

一、改变数组元素&#xff08;差分&#xff09;方法一&#xff1a;差分数组map(int,input().split())for b in arr[:n]:print(1 if b else 0,end )方法二&#xff1a;区间合并interval.sort(keylambda x:x[0])二、差分a [0] list(map(int, input().split())) a[n 1:]三、差…...

数据结构入门5-2(数和二叉树)

目录 注&#xff1a; 树的存储结构 1. 双亲表示法 2. 孩子表示法 3. 重要&#xff1a;孩子兄弟法&#xff08;二叉树表示法&#xff09; 森林与二叉树的转换 树和森林的遍历 1. 树的遍历 2. 森林的遍历 哈夫曼树及其应用 基本概念 哈夫曼树的构造算法 1. 构造过程 …...

把Redis当作队列来用,到底合适吗?

文章目录 前言从最简单的开始:List 队列发布/订阅模型:Pub/Sub趋于成熟的队列:Stream1) Stream 是否支持「阻塞式」拉取消息?2) Stream 是否支持发布 / 订阅模式?3) 消息处理时异常,Stream 能否保证消息不丢失,重新消费?4) Stream 数据会写入到 RDB 和 AOF 做持久化吗?…...

Python学习-----项目设计1.0(设计思维和ATM环境搭建)

目录 前言&#xff1a; 项目开发流程 MVC设计模式 什么是MVC设计模式&#xff1f; ATM项目要求 ATM项目的环境搭建 前言&#xff1a; 我个人学习Python大概也有一个月了&#xff0c;在这一个月中我发布了许多关于Python的文章&#xff0c;建立了一个Python学习起步的专栏…...

(九)python网络爬虫(理论+实战)——爬虫实战:指定关键词的百度新闻爬取

系列文章目录 (1)python网络爬虫—快速入门(理论+实战)(一) (2)python网络爬虫—快速入门(理论+实战)(二) (3) python网络爬虫—快速入门(理论+实战)(三) (4)python网络爬虫—快速入门(理论+实战)(四) (5)...

数据分析面试、笔试题汇总+解析(六)

&#xff08;接上篇&#xff09; 面试题&#xff08;MySQL篇&#xff09; 3. 如何提高MySQL的查询速度&#xff1f; 考点解析&#xff1a; 考察面试者对MySQL查询优化的理解 参考答案&#xff1a; &#xff08;因为这个问题如果回答的详细一点可以写上一整篇&#xff0c;…...

vue3+rust个人博客建站日记3-编写主页

内容 绘制了主页的基本布局设置了封装了header栏组件并设置了全局黑夜模式. 选择一个组件库-Naive UI 如果没有设计能力&#xff0c;又想开发出风格统一的前端页面。就一定要选择一个漂亮的组件库。 本次项目选择使用Naive UI&#xff0c;NaivUI库曾被Vue框架作者尤雨溪推荐…...

前端常考react面试题(持续更新中)

react diff 算法 我们知道React会维护两个虚拟DOM&#xff0c;那么是如何来比较&#xff0c;如何来判断&#xff0c;做出最优的解呢&#xff1f;这就用到了diff算法 diff算法的作用 计算出Virtual DOM中真正变化的部分&#xff0c;并只针对该部分进行原生DOM操作&#xff0c;而…...

C++11多线程编程 二:多线程通信,同步,锁

C11多线程编程 一&#xff1a;多线程概述 C11多线程编程 二&#xff1a;多线程通信&#xff0c;同步&#xff0c;锁 C11多线程编程 三&#xff1a;锁资源管理和条件变量 2.1 多线程的状态及其切换流程分析 线程状态说明&#xff1a; 初始化&#xff08;Init&#xff09;&am…...

js——原型和原型链

最近看了很多面试题&#xff0c;看到这个js原型是常考点&#xff0c;于是&#xff0c;我总结了一些该方面的知识点分享给大家&#xff0c;其实原型就是那么一回事&#xff0c;搞明白了就没啥了。结果如下图所示&#xff1a;原型原型又可分为显式原型和隐式原型1.1显式原型显式原…...

好域名做网站/网络推广方案七步法

一、问题由来前一段时间本人的电脑崩溃了&#xff0c;系统还原之后&#xff0c;eclipse就用不了&#xff0c;也找不大原因。eclipse报错原因是jvm出现问题&#xff1a;JVM terminated Exit code2 C:\ProgramData\Oracle\javapath\javaw.exe等发现似乎是JVM出现错误了然后输入ja…...

福建省人民政府第七办公室/武汉网络推广seo

同步事件1.声明事件//负责传递消息public delegate void MethodCall(string message);public static event MethodCall requestdata; 2.注册事件Page_Load事件中注册事件 requestdata new MethodCall(FormDataGridViewDataTable_requestdata); 3.显式的触发事件private void bu…...

新疆建设兵团一师网站/万网域名

本文章是❤️力扣 (LeetCode)❤️的内容&#xff0c;该专栏还有多篇优质内容在等待你观看&#xff0c;现在点击右上角点击这个————&#x1f680;订阅专栏&#x1f680; &#x1f506;坚持刷算法 &#x1f48e;每天进步一点点 &#x1f680;冲冲冲冲冲冲冲冲冲冲 &#x1f4…...

那些企业网站做的较好/网络营销咨询公司

我用两台LinuxLinuxA IP&#xff1a;192.168.10.101LinuxB IP&#xff1a;192.168.10.102首先我们在LinuxA上挂载光驱和安装FTP服务器然后安装FTP服务器&#xff08;在同一台上&#xff0c;也就是LinuxA上&#xff09;修改FTP的主配置文件&#xff08;添加一句话anon…...

做网站加一个定位功能要多少钱/百度seo收费

备份需求和rman备份 oracle数据库的备份相关问答&#xff1a; 1&#xff09;备份时数据库处于何种状态&#xff1f; 备份时数据库处于OPEN状态&#xff0c;这样数据库可以正常工作。 2&#xff09;备份的数据备份在什么地方&#xff1f; 备份在本地磁盘。 3&#xff09;备份的存…...

一个企业做网站推广的优势/百度导航官网

1.新建Gui工程&#xff0c;在主界面上添加一个标签label&#xff0c;并设置其显示内容为“0000-00-00 00:00:00 星期日”。2.在mainwindow.h中添加槽函数声明。private slots:void timerUpDate();3.在mainwindow.cpp中添加代码。添加#include 的头文件包含&#xff0c;这样就包…...