Java数据类型:基本类型

Java是一种强类型语言,定义变量时,必须指定数据类型。

// 变量必须指定数据类型
private String username;

初学者不免有个疑问:在实际编写代码的过程中,该如何选择数据类型呢?

回答这个问题之前,先来解决下面两个问题:

①Java中的数据类型有什么作用?
②Java有哪些数据类型呢?

一,数据类型的基本概念

1,定义

  • 数据类型是变量的属性
  • 决定了变量可以存储的数据的种类以及这些数据如何被操作

2,为什么要区分数据类型

Java是一门工业级的高级程序语言,区分不同的数据类型出于以下几个核心原因:

  • 内存效率:不同类型的数据需要不同的存储空间。例如,一个byte类型只需1字节的存储空间,而一个int类型需要4字节。这种区分允许程序仅使用必要的内存空间,从而节省资源,提高效率。

  • 精确表达数据:每种数据类型都有其特定的取值范围和精度。例如,float类型用于存储近似的小数,而double提供更高的精度。boolean类型则用于逻辑判断,只有truefalse两个值。通过精确匹配数据类型与数据需求,可以确保数据的准确表达和处理。

  • 安全性:类型检查机制是Java的一大特色。编译器会检查数据类型的正确性,防止不恰当的类型使用,如将字符串与整数进行算术运算,这会在编译阶段报错,避免了运行时错误。

  • 性能优化:不同的数据类型支持不同的操作集。例如,整型数据支持位操作,而浮点型则不支持。区分数据类型可以让编译器生成更优化的代码,利用特定类型的特性进行高效运算。

  • 清晰的代码可读性:通过数据类型命名,程序员可以直观地了解变量的用途和它可以存储的值的范围,这提高了代码的可读性和可维护性。

  • 面向对象编程的支持:Java是一种面向对象的语言,区分数据类型有助于实现面向对象的原则,如封装、继承和多态。基本类型可以被视为简单对象,而引用类型则用于复杂的对象操作,这符合面向对象设计的思想。

  • 避免数据溢出和精度损失:通过为不同大小和精度的数据指定不同类型,可以在设计时预防数据溢出(如将过大的数存储在int类型中)和精度损失(如使用float进行高精度计算)的问题。

3,分类

Java中的数据类型分为两类:

  • 基本数据类型
  • 引用数据类型

基本数据类型是Java语言预先定义的,它们不是对象,而是直接存储值。这篇文章仅介绍基本数据类型。

二,基本数据类型

1,分类

基本数据类型可以分为四类

  • 整数,包括 byte、short、int、long
  • 浮点数,包括double、float
  • 字符,仅有一个char类型
  • 布尔类型,仅有一个boolean类型
    在这里插入图片描述

2, 整型(Integer Types)

整型用于存储整数,主要有以下几种:

  • byte: 占1字节,范围-128到127
  • short: 占2字节,范围-32,768到32,767
  • int: 占4字节,是Java中最常用的整数类型,范围-231到231-1,能存储的数据范围大约是正负21亿
  • long: 占8字节,用于需要更大数值的情况,范围-263到263-1。能存储的数据范围大约是正负9千万亿long的数值范围远超int,适用于需要存储极大整数的场景。定义long常量时需以Ll结尾,以区分int,推荐以L结尾,避免与数字1混淆。

在这里插入图片描述

byte b = 100; // 正确
// byte bError = 128; // 错误:超出byte范围short s = 30000; // 正确
// short sError = 32768; // 错误:超出short范围int i = 2_147_483_647; // 使用下划线增加可读性
// int iError = 2_147_483_648; // 错误:超出int范围long l = 9_223_372_036_854_775_807L; // long需加L/l

3, 浮点型(Floating-Point Types)

浮点型用于存储小数,主要有:

  • float: 占4字节,大约有6-7位有效数字
  • double: 占8字节,精度更高,约有15位有效数字,是Java中的默认浮点类型。doublefloat提供更高的精度,更适合需要高精度计算的场景。

在这里插入图片描述

float f = 3.14f; // 需要f/F后缀
// float fError = 1.0E39f; // 错误:超出float表示范围double d = 3.141592653589793; // 不需要后缀,默认为double
// double dError = 1.0E309 + 1; // 错误:超出double表示范围

计算机在处理浮点数的计算时,容易出现误差,对于财务计算等精确度要求极高的情况,最佳实践是使用BigDecimal以避免浮点数运算的误差。BigDecimal采用了特殊的算法以避免直接进行浮点数的计算。

三,类型转换

1,什么是数据类型转换

在进行数学运算、比较或者赋值等操作时,如果参与操作的数据类型不一致,Java会如何处理呢?

Java要求这些数据必须转换为相同的类型才能进行运算

例如,当你尝试将一个int类型的值与一个double类型的值相加时,int值会被自动转换为double,因为double的精度更高。

这就是Java的数据类型转换

2,如何进行类型转换

Java支持①自动类型转换(也称为隐式类型转换)(例如,byteint)和②强制类型转换(也称为显式类型转换)(如,(int) longValue)。

3, 自动类型转换(Auto Widening Conversion)

自动类型转换是指Java编译器在没有明确指示的情况下,自动将小范围的数据类型提升为大范围的数据类型,这通常是安全的,不会导致数据丢失。

自动类型转换遵循以下规则:

数据类型层次:Java的数据类型按照其存储容量从低到高排列为:byte -> short -> char -> int -> long -> float -> double。自动类型转换时,左边的类型自动提升为右边的类型,比如 int 可以提升为 double,但不会出现反方向的自动转换,即double 不可能自动转换为 int。注意,char可以直接转换为int,因为它们都代表整数。

兼容性:转换的类型必须是兼容的,即目标类型能够容纳源类型的值。例如,一个int值可以自动转换为long,因为long的范围比int

布尔型boolean类型与其他基本类型不兼容,不能进行自动转换

4,强制类型转换(Explicit Narrowing Conversion)

当目标类型小于源类型时,自动类型转换无法进行,此时就需要使用强制类型转换。

强制类型转换规则如下:

  1. 显式声明:需要使用括号明确指定转换的目标类型,例如(int)longValue(longValue是一个long类型变量)。

  2. 数据丢失风险:由于目标类型可能无法完全容纳源类型的所有可能值,强制类型转换可能会导致数据丢失或精度降低。例如,将double转换为float可能会丢失小数部分的精度。

        double a = 3.141593300001;// 有12小数,超出float表达范围float b = (float) a; // 强制转换后,后五位会被丢弃,出现精度损失System.out.println(b+"");

在这里插入图片描述

  1. 范围检查:在进行强制类型转换前,开发者应确保源类型值的范围能够被目标类型安全地表示。如果超出目标类型的范围,可能会导致数据溢出,代码可以正常运行,但有可能出现不可以预知的结果。
        int a = 300000;// 超出short的最大值32767short b = (short) a;System.out.println(b+"");

其运行结果:

在这里插入图片描述
强制转换后,变量b的值是-27680,原因是4字节的变量值强制转换为2字节的变量时,只截取了其中一部分,导致结果出现差异。

  1. 特例:当将floatdouble转换为intlong时,小数部分会被直接丢弃(截断),而不是四舍五入。
       double a = 3.14159;// 有小数short b = (short) a; // 强制转换后,小数被丢弃System.out.println(b+""); // 打印 "3"

在这里插入图片描述

示例

// 自动类型转换示例
byte b = 100;
int i = b; // 自动从byte转换为int// 强制类型转换示例
double d = 123.45;
int i = (int) d; // 强制从double转换为int,小数部分丢失

四,如何选择基本数据类型

基于上面的学习,在编写Java代码时,选择合适的基本数据类型就有了理论依据。

选择Java基本数据类型,通常考虑如下几个方面:

  • 数据的用途和所需表达的值的范围

    如果数据是整数且在-128到127之间,byte可能是最佳选择;如果需要表示较大的整数,则考虑intlong

  • 精度要求

    对于浮点数,如果需要高精度计算(如财务计算),使用BigDecimal而非floatdouble,因为后者会有精度损失。对于一般科学计算,double足够使用。

  • 类型兼容性和运算规则

    当不同类型的数据进行运算时,Java会自动将较小类型转换为较大类型。理解这些规则有助于避免不必要的类型转换,比如知道intlong运算时,int会被自动提升为long

  • 性能考虑

    基本数据类型的操作通常比对象类型(如Integer)快,因为它们不需要通过对象引用来访问值。
    在循环和频繁操作的代码块中,尽量使用基本数据类型以提高性能。

  • 避免类型转换

    尽量减少不必要的类型转换,特别是强制类型转换,因为这可能导致数据丢失或异常。在设计阶段就做好类型规划,以减少转换的需求。

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

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

相关文章

黑马点评项目总结及个人优化

怎么根据前端代码实现自己的后端业务,实现不同接口 查阅文档:如果有完善的接口文档,可以直接查阅文档来了解后端所有接口的业务逻辑和功能。 阅读后端代码:通过阅读后端代码,特别是控制器(Controller)层和服务(Service)层的代码,可以了解后端所有接口的具体实现逻辑。…

vscode主侧栏源代码管理(Source Control)不见了!!!

今天上班突然发现vscode中主侧栏中源代码管理(Source Control)不见了,项目又着急赶工,没时间找它,可真愁死我了。 以为这样代码没办法提交了??? 嘿嘿, 还好我用命令&a…

不限经验,专业,也能月薪2-3W,这个神仙副业今年太火了!

哈喽,大家好,我是醒醒团队电商花花。 一个月前,有朋友找我咨询视频号的问题,关于营业执照的问题,问我做视频号小店用什么营业执照,我就把视频号小店的营业执照问题给讲一下。 因为个体店执照在视频号上不…

PCB笔记(二十六):PCB检查

前言 首先检查元器件是否100% 放置 文章目录 1、打开DRC2、database check3、检查DRC4、检查多余的线5、其他需要注意的点a.检查差分线、等长线是否已调好b.注意检查晶振、电感等元件上/下方是否其他线经过(一般不允许线经过)c.打开place_bo…

【启明智显技术分享】SSD201/SSD202D核心板UI界面开发全攻略:LVGL使用指南

提示:作为Espressif(乐鑫科技)大中华区合作伙伴及sigmastar(厦门星宸)VAD合作伙伴,我们不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程供开发小伙伴参考。同时也用心整理了乐鑫及星宸…

浅谈电动汽车充电站的电气安全

1 引言 1月14日日上午10点左右,青岛市市北区辽宁路63号公交停车场内,一辆报废公交车突然起火,由于大风天气,大火很快引燃了停在旁边的几辆报废车。消防人员快速赶到,迅速控制住火势。11时30分,停车场内的…

AR项目的技术难点

AR项目的技术难点主要体现在以下几个方面,AR项目的技术难点体现在多个方面,需要从多个角度进行综合考虑。随着技术的进步和标准的完善,AR项目开发将会变得更加容易,AR技术也将得到更加广泛的应用。北京木奇移动技术有限公司&#…

电脑桌面便签软件推荐,电脑桌面怎么设置便签

在日常工作中,电脑已成为我们不可或缺的办公工具。面对繁杂的工作任务和信息,如何在电脑桌面上高效管理待办事项,成为了提升工作效率的关键。为了更好的管理内容,很多人会选择一款优秀的电脑桌面便签软件,这类软件能帮…

华为设备display查看命令

display version //查看版本信息 display current-configuration //查看配置详情 display this //查看当前视图有效配置 display ip routing-table //查看路由表 display ip routing-table 192.168.3.1 //查看去往3.1的路由 display ip interface brief //查看接口下ip信息 dis…

jupyter notebook中调整图片大小

截屏 ctrl V 这个目前只能保证是截屏大小&#xff0c;改变不了&#xff0c;要么之久 把图形缩小后再截图 感觉很模糊 png文件导入 markdown 代码1 <img src"./1.png" width250 height200>markdown 代码2 <img src"./1.png" width938 height…

有哪些值得买的开放式耳机推荐?2024年开放式运动耳机选购指南

开放式耳机因其独特设计&#xff0c;能在一定程度上保护听力。相较于传统封闭式耳机&#xff0c;开放式设计允许周围环境声音自然流入耳内&#xff0c;降低了耳内共振和声压&#xff0c;减少了耳道的不适感&#xff0c;从而减轻了对听力的潜在损害。对于追求音质与听力保护并重…

2024年天猫618超级红包领取入口及618天猫红包活动时间是从什么时候开始?

随着电商的飞速发展&#xff0c;各大平台的促销活动也越来越频繁&#xff0c;其中天猫618年中大促无疑是消费者们翘首以盼的购物狂欢节。2024年的天猫618活动又有哪些新的玩法和优惠呢&#xff1f;下面我们就来一一揭晓。 一、红包领取时间与方法 2024年天猫618红包领取时间从…