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

Java 数据类型

数据类型用于对数据归类,以便开发者理解和操作。

基本数据类型

Java 确定了每种基本数据类型所占存储空间的大小,不会像其它语言那样随机器硬件架构的变化而变化,这使 Java 程序更具可移植性。

Java 中定义了如下的基本数据类型。

byte

表示整数,取值范围 -2 ^ 7 ~ 2 ^ 7 - 1,占 8 个 bit 位,1 个字节。

byte beVar = 100;

short

表示整数,取值范围 -2 ^ 15 ~ 2 ^ 15 - 1,占 16 个 bit 位,2 个字节。

short stVar = 200;

int

表示整数,取值范围 -2 ^ 31 ~ 2 ^ 31 - 1,占 32 个 bit 位,4 个字节,整数字面量的默认类型。

int itVar = 300;

long

表示整数,取值范围 -2 ^ 63 ~ 2 ^ 63 - 1,占 64 个 bit 位,8 个字节。赋值时,如果超过了 int 类型的取值范围,需要在数值后面加 Ll

// 在 int 型的取值范围内时可用,不建议,最好加上 L
long lgVar1 = 400; // 赋值时,字面量后面要加 L 或 l
long lgVar2 = 400L;

float

表示单精度浮点数,取值范围 -3.4E ^ 38 ~ -1.4E ^ -45、1.4E ^ -45 ~ 3.4E ^ 38,E 表示以 10 为底的指数,占 32 个 bit 位,4 个字节。赋值时,需要在数值后面加 Ff,因为浮点数字面量的默认类型是 double

不能用于表示精确值,如货币等,此时应该使用 BigDecimal 对象类型。

float ftVar = 3.14F; // 浮点数默认类型是 double,必须加 F

double

表示双精度浮点数,取值范围 -1.7E ^ 308 ~ -4.9E ^ -324、4.9E ^ -324 ~ 1.7E ^ 308,E 表示以 10 为底的指数,占 64 个 bit 位,8 个字节,浮点数字面量的默认类型。

不能用于表示精确值,如货币等,此时应该使用 BigDecimal 对象类型。

double deVar1 = 3.14;
double deVar2 = 3.14E2; // 314.0
double deVar3 = 3.14E-2; // 0.0314

char

表示单个字符,可以是中文字符,Java 内部进行字符处理时,采用 unicode 编码方式,具体编码格式是 UTF-16BE(2 或 4 个字节),取值范围 0 ~ 65535,占 16 个 bit 位,2 个字节,本质是一个无符号正整数(没有符号位),对应 unicode 编号。

char 只能表示 unicode 编号在 0 ~ 65535 的字符,超出范围的字符将使用两个 char 表示。

char 的字面量使用单引号 '' 括起来。

char crVar1 = 'A';
char crVar2 = '光';
char crVar3 = 97; // char 的本质就是无符号正整数
char crVar5 = 0x9a6c;
char crVar5 = '\u0000'; // unicode 编码

转义字符

在字符前面 \ 可以改变字符原来的含义,比如 ‘\0’、‘\t’ 等。

转义字符含义
\n换行
\r回车
\0结束字符
\s空格
\’单引号
\"双引号
\\反斜杠
\b退格符

boolean

表示真假值,取值为 truefalse,至于占用的空间,得看 JVM 的具体实现。

void

表示无数据,用在方法上,表示没有返回值。

⭐基本数据类型转换

在 Java 中,声明变量时需要指定数据类型,JVM 会根据数据类型申请相应的内存空间,分配的空间只能存储该类型的数据。如果赋值的数据类型和声明的数据类型不一致,则需要进行数据类型转换。

image.png

boolean 类型与其他7种类型的数据都不能进行转换,char 类型不支持自动转换成它,只支持强制转换。

自动转换

自动转换是隐式的,取值范围从小到大,可以直接转换,转换时会进行扩宽(widening conversion)。因为较大的类型(如 int)要保存较小的类型(如 byte),取值范围是足够的,不需要强制转换。

强制转换

强制转换是显式的,取值范围从大到小,必须强制转换,转换时会进行缩小(narrowing conversion)。

强制转换可能会损失精度。整数类型之间相互转换,如果整数超出目标类型范围,会对目标类型的范围取余数;从浮点类型转成整数类型,会发生截尾(truncation),也就是把小数部分去掉,只留下整数部分,且如果整数部分超出目标类型范围,一样将对目标类型的范围取余数。

// 实例
long lo = 99;
int i = (int) lo;

隐式转换

/*1、多类型混合运算时,会自动转成容量最大的数据类型,再进行计算,并返回相应类型的结果对于整数来说,如果没有 long 型,则提升至 int 型(不管有没有 int 型变量参与)2、在取值范围内时,整数字面量(int 型)赋值给 byte、short、char 时会自动转换3、在取值范围内时,常量和字面量的运算结果赋值给 byte、short、char 时会自动转换,有变量时就要强转4、赋值运算(+=、-=、...)会自动进行强转5、`char` 的运算是按 Unicode 编号进行的,在进行算术运算时会转换为 `int` 类型*/byte a = 100; 
// a + 1 运算提升至 int 型,值在 byte 的取值范围内,但由于是变量和字面量运算,编译时不会优化,需要手动强转
byte b = a + 1; final byte c = 100;
// c + 1 运算提升至 int 型,值在 byte 的取值范围内,且是常量和字面量运算,编译时会优化,不需要手动强转
byte d = c + 1; // 100 + 1 运算提升至 int 型,值在 byte 的取值范围内,且是字面量和字面量运算,编译时会优化,不需要手动强转
byte f = 100 + 1; 

对象数据类型

Java 是面向对象的语言,除了基本数据类型,其他都是对象数据类型,比如字符串、数组等。

  • 类:class
  • 接口:interface
  • 数组:[](数组有个类 Array)

对象是什么?简单来说,对象可以理解为基本数据、其它对象数据的组合。比如一个人,他的姓名是一个字符串,年龄是一个整数。

对象数据类型同样存在类型转换。

相关文章:

Java 数据类型

数据类型用于对数据归类,以便开发者理解和操作。 基本数据类型 Java 确定了每种基本数据类型所占存储空间的大小,不会像其它语言那样随机器硬件架构的变化而变化,这使 Java 程序更具可移植性。 Java 中定义了如下的基本数据类型。 byte …...

Prometheus 监控云Mysql和自建Mysql(多实例)

本文您将了解到 Prometheus如何配置才能监控云Mysql(包括阿里云、腾讯云、华为云)和自建Mysql。 Prometheus 提供了很多种Exporter,用于监控第三方系统指标,如果没有提供也可以根据Exporter规范自定义Exporter。 本文将通过MySQL server exporter 来监控…...

Vue3中的h函数

文章目录简介简单使用参数使用计数器进阶使用函数组件插槽专栏目录请点击 简介 众所周知,vue内部构建的其实是虚拟DOM,而虚拟DOM是由虚拟节点生成的,实质上虚拟节点也就是一个js对象事实上,我们在vue中写的template,最终也是经过…...

阿尔法开发板 IMX6ULL 说明

一. IMX6ULL开发板 IMX6ULL开发板即正点原子的阿尔法(ALPHA)开发板,采用恩智浦芯片,cortex-A7架构的。 二. IM6ULL开发板说明 1. IO说明 对于IMX6ULL芯片,一个IO对应两个寄存器,第一个寄存器负责配置其复用功能,…...

Altium Designer19 #学习笔记# | 基础应用技巧汇总

全文目录一.元件符号库二.元件封装库1.AD09 集成元件库/封装库三.电路原理图1. 巧用查找"相似对象功能"1.1 查找相同元件1.2. 查找相同文本1.3. 查找相同网络 :E - S - C四.PCB原理图【AD PCB模式下的常用快捷键】PCB视图放大/缩小PCB视图左/右移动PCB切换…...

Python 元类编程实现一个简单的 ORM

概述 什么是ORM?    ORM全称“Object Relational Mapping”,即对象-关系映射,就是把关系数据库的一行映射为一个对象,也就是一个类对应一个表,这样,写代码更简单,不用直接操作SQL语句。 现在我们就要实…...

《C++ Primer Plus》第18章:探讨 C++ 新标准(7)

C11 新增的其他功能 C11 增加了很多功能,本书无法全面介绍;另外,本书编写期间,其中很多功能还未得到广泛实现。然而,有些功能有必要简要地介绍一下。 并行编程 当前,为提高计算机性能,增加处…...

Redis学习(二):Redis安装测试

概述 Redis是什么 Redis, Remote Dictionary Server, 即远程字典服务。免费开源的数据库。 由C语言编写,支持网络,可基于内存亦可持久化的日志型、KV数据库,并提供所种语言的API。 Redis能干嘛 用于内存存储,持久化。rdb、ao…...

Vector - CAPL - 简介及数据结构

对于想进入车载行业或者已经在车载行业工作的朋友对于CAPL这个词都会相当的熟悉,都知道他是做车载网络测试脚本的语言,并且跟C有点类似,但是它到底是什么呢?CAPL全称(Communication Access Programming Language&#…...

20230304英语学习

What Would Happen if the Moon Disappeared Tomorrow? 如果明天月球消失了会怎样? The closest object to our planet, the Moon, may seem like Earth’s little sibling.Since its birth, the satellite has mostly just hung around, playing gravitational t…...

【基础算法】单链表的OJ练习(3) # 移除链表元素 # 相交链表 #

文章目录前言移除链表元素相交链表写在最后前言 本章的OJ练习也是相对简单的,只要能够理解解题的思路,并且依照这个思路能够快速的写出代码,我相信,你的链表水平已经足够了。 对于OJ练习(2) : ->传送门…...

【自用】SpringBoot项目通用类整理

文章目录全局Json序列化Controller日志切面全局异常拦截GlobalExceptionHandlerApiResultBusinessExceptionResponseEntityUtil全局返回体包装MP自动填充接口文档配置类自定义Async异步线程池本文主要整理各类项目中通用的配置类、工具类,便于复查自用。 全局Json序…...

动态规划法(总述)多阶段决策最优化问题

动态规划: 研究最优控制问题提出的 该问题有n个输入,问题的解由这n个输入组成,这个子集必须满足事先给定的条件,这些条件称为约束条件,满足约束条件的可行解可能不只有一个为了衡量可行解的优劣,通常以一些函数的形式&…...

MySQL跨服务器数据映射

MySQL跨服务器数据映射环境准备1. 首先是要查看数据库的federated引擎 开启/关闭 状态2. 打开任务管理器,并重启mysql服务3. 再次查看FEDERATED引擎状态,引擎已启动映射实现问题总结在日常的开发中经常进行跨数据库进行查询数据。 同服务器下跨数据库进…...

利用反射实现通过读取配置文件对类进行实例化-课后程序(JAVA基础案例教程-黑马程序员编著-第十二章-课后作业)

【案例12-3】:利用反射实现通过读取配置文件对类进行实例化 【案例介绍】 1.案例描述 现在有一个项目,项目中创建了一个Person类,在Person类中定义了一个sleep()方法。在工程中还定义了一个Student类继承Person类,在Student类中…...

1.2 CSS文本属性

CSS Text(文本)属性: 定义文本外观,颜色,装饰,缩进,行间距来修饰文本 文本样式 文本缩进 text-indent文本水平对齐方式:text-align文本修饰:text-decoration行高 line-height CSS文本颜色属性…...

SpringCloud之认识微服务

文章目录一、传统项目转型二、走进 SpringCloud三、微服务项目搭建3.1 创建一个 SpringBoot 项目3.2 创建三个 Maven 子工程3.3 为子工程创建 application.yml3.4 引入依赖3.5 数据库 建库建表3.6 编写业务提示:以下是本篇文章正文内容,SpringCloud系列学…...

【go语言之thrift协议二之server端分析】

go语言之thrift协议二serverthrift.TProtocolFactoryTTransportReadWriteCloserContextFlusherReadSizeProviderTProtocolrunServerNewTServerSocketNewCalculatorHandlerNewCalculatorProcessorNewTSimpleServer4server.ServeListenAcceptLoopprocessRequests在上一篇文章分析…...

【办公类05-03】Python批量修改文件名前面的序号(已有的序号错了,需要改成正确的号码)

背景需求下载教程,手动输入编号,有一个编号错误,导致后面所有编号都错了。30实际是29,以此类推怎样才能快速修改编号数字?前期考虑到可能要改编号,所以在每个编号后面加“ ”(空格)&…...

定向模糊测试工具Beacon基本用法

Beacon是一个定向模糊测试工具,给定行号,能够定向探索行号附近的代码区域。主要思想是采用静态分析的方法获取到与目标有关的变量的最弱前置条件(weakest precondition)的信息,并在相关位置插入断言,来提前…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

使用Spring AI和MCP协议构建图片搜索服务

目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...