深入理解 Java 基本数据类型

C语言32位整数算术实用程序例程与测试 本文还有配套的精品资源,点击获取 简介:该压缩包包含两个文件: i4lib 库文件和 i4lib_test 测试程序,专注于C语言中单精度整数(I4)算术运算的实现和测试。I4通常指32位整数,与 int 类型相对应。库中可能包含算术运算函数及边界检查和溢出处理。测试文件对库函数进行全面验证。该资源旨在提升学习者对C语言中32位整数... 阅读详情

数据类型分类

Java 中的数据类型有两类:

String

值类型

Java 语言提供了 8 种基本类型,大致分为 4 类

整数型

byte - 8 位。

short - 16 位。

int - 32 位。

long - 64 位,赋值时一般在数字后加上 l 或 L 。

浮点型

float - 32 位,直接赋值时必须在数字后加上 f 或 F 。

double - 64 位,赋值时一般在数字后加 d 或 D 。

字符型

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

布尔型

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

值类型和引用类型的区别

从概念方面来说

基本类型:变量名指向具体的数值。

引用类型:变量名指向存数据对象的内存地址。

从内存方面来说

基本类型:变量在声明之后,Java 就会立刻分配给他内存空间。

引用类型:它以特殊的方式(类似 C 指针)向对象实体(具体的值),这类变量声明时不会分配内存,只是存储了一个内存地址。

从使用方面来说

==equals

:point_right: 扩展阅读: Java 基本数据类型和引用类型

这篇文章对于基本数据类型和引用类型的内存存储讲述比较生动。

数据转换

Java 中,数据类型转换有两种方式:

自动换行

强制转换

自动转换

一般情况下,定义了某数据类型的变量,就不能再随意转换。但是 JAVA 允许用户对基本类型做 有限度 的类型转换。

如果符合以下条件,则 JAVA 将会自动做类型转换:

由小数据转换为大数据

显而易见的是,“小”数据类型的数值表示范围小于“大”数据类型的数值表示范围,即精度小于“大”数据类型。

所以,如果“大”数据向“小”数据转换,会丢失数据精度。比如:long 转为 int,则超出 int 表示范围的数据将会丢失,导致结果的不确定性。

反之,“小”数据向“大”数据转换,则不会存在数据丢失情况。由于这个原因,这种类型转换也称为 扩大转换 。

这些类型由“小”到“大”分别为:(byte,short,char) < int < long < float < double。

这里我们所说的“大”与“小”,并不是指占用字节的多少,而是指表示值的范围的大小。

转换前后的数据类型要兼容

由于 boolean 类型只能存放 true 或 false,这与整数或字符是不兼容的,因此不可以做类型转换。

整型类型和浮点型进行计算后,结果会转为浮点类型

示例:

longx =30;floaty =14.3f;System.out.println("x/y = "+ x/y);

输出:

x/y = 1.9607843

可见 long 虽然精度大于 float 类型,但是结果为浮点数类型。

强制转换

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

强制转换使用括号 () 。

引用类型也可以使用强制转换。

示例:

float f =25.5f;intx = (int)f;System.out.println("x = "+ x);

装箱和拆箱

包装类、装箱、拆箱

Java 中为每一种基本数据类型提供了相应的包装类,如下:

Byte<->byteShort<->shortInteger <->intLong<->longFloat<->floatDouble<->doubleCharacter <->charBoolean<->boolean

引入包装类的目的就是:提供一种机制,使得 基本数据类型可以与引用类型互相转换 。

基本数据类型与包装类的转换被称为 装箱 和 拆箱 。

装箱 (boxing)是将值类型转换为引用类型。 例如: int 转 Integer

装箱过程是通过调用包装类的 valueOf 方法实现的。

拆箱 (unboxing)是将引用类型转换为值类型。 例如: Integer 转 int

拆箱过程是通过调用包装类的 xxxValue 方法实现的。(xxx 代表对应的基本数据类型)。

自动装箱、自动拆箱

基本数据(Primitive)型的自动装箱(boxing)拆箱(unboxing)自 JDK 5 开始提供的功能。

JDK 5 之前的形式:

Integer i1 =newInteger(10);// 非自动装箱

JDK 5 之后:

Integer i2 =10;//自动装箱

Java 对于自动装箱和拆箱的设计,依赖于一种叫做享元模式的设计模式(有兴趣的朋友可以去了解一下源码,这里不对设计模式展开详述)。

:point_right: 扩展阅读: 深入剖析 Java 中的装箱和拆箱

结合示例,一步步阐述装箱和拆箱原理。

装箱、拆箱的应用和注意点

装箱、拆箱应用场景

一种最普通的场景是:调用一个 含类型为 Object 参数的方法 ,该 Object 可支持任意类型(因为 Object 是所有类的父类),以便通用。当你需要将一个值类型(如 int)传入时,需要使用 Integer 装箱。

另一种用法是:一个 非泛型的容器 ,同样是为了保证通用,而将元素类型定义为 Object 。于是,要将值类型数据加入容器时,需要装箱。

当 == 运算符的两个操作,一个操作数是包装类,另一个操作数是表达式(即包含算术运算)则比较的是数值(即会触发自动拆箱的过程)。

示例:

Integer i1 =10;// 自动装箱Integer i2 =newInteger(10);// 非自动装箱Integer i3 = Integer.valueOf(10);// 非自动装箱inti4 =newInteger(10);// 自动拆箱inti5 = i2.intValue();// 非自动拆箱System.out.println("i1 = ["+ i1 +"]");System.out.println("i2 = ["+ i2 +"]");System.out.println("i3 = ["+ i3 +"]");System.out.println("i4 = ["+ i4 +"]");System.out.println("i5 = ["+ i5 +"]");System.out.println("i1 == i2 is ["+ (i1 == i2) +"]");System.out.println("i1 == i4 is ["+ (i1 == i4) +"]");// 自动拆箱// Output:// i1 = [10]// i2 = [10]// i3 = [10]// i4 = [10]// i5 = [10]// i1 == i2 is [false]// i1 == i4 is [true]

示例说明:

上面的例子,虽然简单,但却隐藏了自动装箱、拆箱和非自动装箱、拆箱的应用。从例子中可以看到,明明所有变量都初始化为数值 10 了,但为何会出现 i1 == i2 is [false 而 i1 == i4 is [true] ?

原因在于:

i1、i2 都是包装类,使用 == 时,Java 将它们当做两个对象,而非两个 int 值来比较,所以两个对象自然是不相等的。正确的比较操作应该使用 equals 方法。

i1 是包装类,i4 是基础数据类型,使用 == 时,Java 会将两个 i1 这个包装类对象自动拆箱为一个 int 值,再代入到 == 运算表达式中计算;最终,相当于两个 int 进行比较,由于值相同,所以结果相等。

装箱、拆箱应用注意点

装箱操作会创建对象,频繁的装箱操作会造成不必要的内存消耗,影响性能。所以 应该尽量避免装箱。

基础数据类型的比较操作使用 == ,包装类的比较操作使用 equals 方法。

小结

(1)Java 中的数据类型有两类:

值类型( byte 、 short 、 int 、 long 、 float 、 double 、 char 、 boolean )

引用类型(除值类型以外,都是引用类型,包括 String 、数组)

(2)Java 中,数据类型转换有两种方式:

自动换行

强制转换

强制转换使用括号 () 。

基础数据类型可以自动转换,转换原则如下:

由小数据转换为大数据

转换前后的数据类型要兼容

整型类型和浮点型进行计算后,结果会转为浮点类型

(3)包装类有如下种类:

Byte<->byteShort<->shortInteger <->intLong<->longFloat<->floatDouble<->doubleCharacter <->charBoolean<->boolean

(4)什么是装箱、拆箱

装箱 (boxing)是将值类型转换为引用类型。 例如: int 转 Integer

装箱过程是通过调用包装类的 valueOf 方法实现的。

拆箱 (unboxing)是将引用类型转换为值类型。 例如: Integer 转 int

拆箱过程是通过调用包装类的 xxxValue 方法实现的。(xxx 代表对应的基本数据类型)。

(5)装箱、拆箱的应用场景

Object

==

(6)装箱、拆箱的应用注意点

装箱操作会创建对象,频繁的装箱操作会造成不必要的内存消耗,影响性能。所以 应该尽量避免装箱。

基础数据类型的比较操作使用 == ,包装类的比较操作使用 equals 方法。

参考资料

Java 基本数据类型和引用类型

深入剖析 Java 中的装箱和拆箱

欢迎工作一到五年的Java工程师朋友们加入Java技术交流:697558955

群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!


。

深入理解Java基本数据类型与表达式 本文深入探讨了Java编程语言中的基本数据类型、表达式、操作符优先级、类型转换、数组以及基本的编程模型。内容涵盖整型、双精度型、布尔型、字符型等数据类型的介绍,以及算术、逻辑、比较等操作符的使用和表达式写法。此外,还涉及了Java中的声明、赋值、条件语句、循环、方法调用和返回值等基本概念,为读者提供了一个系统性的编程基础知识框架。 阅读详情

相关推荐

基于CANoe的车载以太网测试

以太网测试 CANoe

Yafet 4553

Java基础(一) 数据类型

目录 1、两种数据类型 2、值类型(基本数据类型) 3、引用类型 4、值类型和引用类型的区别 5、数据转换 5.1自动转换 5.2 强制转换 5.3装箱和拆箱 1、两种数据类型 2、值类型(基本数据类型) bit (位):位是计算机中存储数据的最小单位,指二进制数中的一个位数,其值为“0”或“1”。 byte (字节):字节是计算机存储容量的基本单位,一个字节由8位...

JUN_LLLL的博客 281

ROS 2 Slam Toolbox实战:从零跑通2D激光建图

SLAM(同步定位与地图构建)是移动机器人实现自主导航的基础技术,其核心在于通过传感器数据实时估计位姿并构建环境栅格地图。slam_toolbox作为ROS 2 Humble及后续LTS版本官方主推的2D SLAM后端,采用图优化+闭环检测架构,兼顾实时性、鲁棒性与工程可维护性。相比cartographer和hector_slam,它原生支持ROS 2、参数精简、诊断友好,特别适合硬件资源有限、缺乏IMU或深度相机的差速机器人平台。本文聚焦真实部署场景,覆盖RPLIDAR等常见2D激光雷达与TurtleBo

weixin_30596165的博客 358

C++基础入门(数据类型)

数据类型 整型 sizeof关键字 实型(浮点数) 字符型 转意字符 字符串 布尔类型 数据的输入 C++规定在创建一个变量或者常量时,必须要指定出相应的数据类型,否则无法给变量分配内存 。   整型 作用:整型变量表示的是整数类型的数据 C++中能够表示整型的类型有以下几种方式,区别在于所占内存空间不同: 数据类型 占用空间 取值范围 short(短整型) 2字节 ...

我是饭饭不烦的博客 922

QMI8658姿态传感器实战:从校准到自检的完整避坑指南

本文详细解析了QMI8658姿态传感器的校准与自检流程,提供了从硬件环境搭建到高级功能开发的完整避坑指南。通过真实案例揭示电源设计、接口优化、温度补偿等关键细节,帮助开发者提升传感器精度和可靠性,适用于工业级应用场景。

weixin_29184075的博客 455

Cadence 17.2 OrCAD原理图库实战:从零创建电阻/电容/LED元件(附封装技巧)

本文以Cadence 17.2 OrCAD为核心,详细讲解了如何从零开始工程化地创建电阻、电容、LED等原理图库元件。内容涵盖库架构设计、符号绘制、引脚属性管理、封装关联技巧以及设计规则检查,旨在帮助硬件工程师构建规范、可复用且易于维护的元件库,为高效PCB设计奠定坚实基础。

weixin_29195615的博客 400

八大基本数据类型

java基本数据类型分为4类: (1)整数型:byte、short、int、long (2)浮点型:float、double(带小数点的数) (3)字符型:char (4)布尔型:boolean基本数据类型特点: byte(字节型):1个字节,8位,范围在(-128~127) System.out.println("最小值:" + Byte.MIN_VALUE); System.out.println("最大值:" + Byte.MAX_VALUE); short(短整型):2个字节,16位,范围在(-32

LoyALbui的博客 1254

基于E310的纯逻辑代码实现AD9361射频收发

基于微相科技的E310平台实现AD9361的射频收发功能。采用纯逻辑控制的方式,不需要PS参与。实现了用VIO控制收发使能,发射功率,收发频率,数据接口时序控制,接收增益,BIST测试等功能。

xiaomingzi55的博客 2331

深入理解 Java 基本语法之数据类型

Java 数据类型分为两大类:基本数据类型和引用数据类型。(一)基本数据类型基本数据类型也称为原生数据类型,它们直接存储在栈内存中,具有固定的大小和值范围。整数类型byte:8 位有符号整数,取值范围为 -128 到 127。short:16 位有符号整数,取值范围为 -32768 到 32767。int:32 位有符号整数,是最常用的整数类型,取值范围为 -2147483648 到 2147483647。long:64 位有符号整数,

qq_25699299的博客 957

实验2 存储器设计与实现【计算机组成原理】

实验2 存储器设计与实现【计算机组成原理】

小心星的博客 2398

YOLOv11改进策略【Conv和Transformer】| IJCAI 2024 利用FreqFormer中的SFA 空间 - 频率注意力和CTA 通道转置注意力 二次改进C3k2

在FreqFormer模型中,SFA(Spatial-Frequency Attention)和CTA(Channel Transposed Attention)模块是关键组成部分,它们针对传统Transformer在图像超分辨率任务中的不足而设计,旨在更好地恢复高频细节,提升模型性能。

Limiiiing的博客 758

Java基本数据类型:深入理解与应用

Java的基本数据类型为我们提供了多种处理不同数据场景的能力。从整数到浮点数、字符到布尔值,每种数据类型都有其特定的用途和优势。在开发中,选择合适的数据类型可以提高程序的性能和可维护性。理解每个数据类型的存储方式、范围、默认值以及在特定应用场景下的优势,将有助于我们在编写高效、清晰且易于维护的Java代码时作出明智的决策。

q68686的博客 989

Trustzone/TEE/安全 面试100问-目录

关键词:cache学习、mmu学习、cache资料、mmu资料、arm资料、armv8资料、armv9资料、 trustzone视频、tee视频、ATF视频、secureboot视频、安全启动视频、selinux视频,cache视频、mmu视频,armv8视频、armv9视频、FF-A视频、密码学视频、RME/CCA视频、学习资料下载、免费学习资料、免费 周贺贺,baron,代码改变世界ctw,Arm精选, 资深安全架构专家,十年手机安全/SOC底层安全开发经验。擅长trustzone/tee安全产品的设计

baron-周贺贺-代码改变世界ctw 649

Java面试突击:深入理解基本数据类型

虽然这部分知识点在面试中很少出现,但是一旦答不上来,面试官很容易就给你打上一个基础不扎实的标签。所幸这部分知识点其实也不多,所以还是尽量花点时间看一看。

qq_43896330的博客 1174

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

深入理解Java基本数据类型与引用数据类型

每当程序调用方法的时候,系统会为该方法建立一个方法栈,其中所有方法声明的变量都放在方法栈中,当方法结束的时候系统会释放方法栈,在该方法中声明的变量随着栈的销毁而结束,这就是局部变量只能在方法中有效的原因。对于基本数据类型的存放文职不能都说是存储在stack中,对于基本数据类型来说,存储在栈中还是在堆中,这取决于基本数据类型声明的位置。是声明在方法中还是声明在类中。(2)当声明的是引用变量时,所声明的变量(该变量实际上是在方法中存储的是内存地址值)是放在方法的栈中,该变量所指向的对象是放在堆类存中的。...

理想主义的花最终会盛开在浪漫主义的土壤里,我的热情永远不会熄灭在现实的平凡之中,我们终将上岸,阳光万里。 746

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

java实型_深入理解java基本数据类型

深入理解java数据类型java是一种强类型语言,这就意味着必须为每一个声明变量声明一种类型。在java中,一共有8种数据类型,其中4种整型,2种浮点类型,1种字符类型和一种表示真值的boolean类型。1. 整型整型用于表示没有小数部分的整数部分,java提供了4中整型,如下表所示:类 型存储大小取值范围int4字节-2^31 ~ 2^31 - 1short2字节-2^15 ~ 2^15 - 1...

weixin_28979345的博客 567

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java基础2——深入理解基本数据类型与常量池

基本数据类型与常量池 基本数据类型   Java中的基本数据类型只有8个:byte(1字节=8位)、short(2字节)、int(4字 节)、long(8字节)、float(4字节)、double(8字节)、char(1字 节)、boolean(1位)。   除了以上8种基本数据类型,其余的都是引用数据类型。   对应的包装类分别是:Byte、Short、Integer、Long、Float、Do...

weixin_43192732的博客 1054

【Java 基本数据类型详解:深入理解 `char` 类型】(小白友好型)

在 Java 中,字符是通过编码来表示的,了解常见的字符编码对掌握char类型的使用非常重要。ASCII 编码:ASCII 是最早的字符编码方案之一,用 7 位二进制编码表示 128 个字符,主要用于英语字符和一些控制字符。ASCLL对照表Unicode 编码:Unicode 是一种字符集,它为每个字符分配一个唯一的编码,可以表示几乎所有语言的字符。每个字符占用 2 个字节的存储空间。UTF-8 编码:UTF-8 是一种变长编码方式,用 1 到 6 个字节表示一个字符。

Yhame的博客 2263

java中基本数据类型结构_Java基础系列1:深入理解Java数据类型

当初学习计算机的时候,教科书中对程序的定义是:程序=数据结构+算法,Java基础系列第一篇就聊聊Java中的数据类型。本篇聊Java数据类型主要包括四个内容:Java基本类型Java封装类型自动装箱和拆箱封装类型缓存机制Java基本类型Java基本类型分类、大小及表示范围Java的基本数据类型总共有8种,包括三类:数值型,字符型,布尔型,其中数值型:整数类型:byte、short、int、long...

weixin_35851374的博客 167

【Java基础-42.3】Java 基本数据类型与字符串之间的转换:深入理解数据类型的转换方法

Java 中基本数据类型与字符串之间的转换是开发中的常见操作。通过parseXxx()valueOf()等方法,可以轻松实现数据类型与字符串之间的转换。在实际开发中,需要注意处理转换异常,并根据场景选择合适的方法。

weixin_39033358的博客 974
上一篇: 学习Java,我建议这样做
下一篇: JAVA面试题:JVM+spring+分布式+并发编程+redis+网络+设计模式!
普通网友
博客等级 码龄8年 15粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值