前情提要:
- 【2023,学点儿新Java-30】变量的基本使用:变量的意义 | 变量的构成要素 | Java中变量的数据类型、变量的使用 | 附:Java中变量的作用域 | 数据类型、变量名和变量值哪个最重要?
- 【2023,学点儿新Java-29】(继续开始)Java中的标识符 | 什么样的标识符才是有效的?| 为什么Java中的标识符不能以数字开头?| 如何让代码更整洁?
- 【2023,学点儿新Java-28】你知道Java中的特殊值都有什么吗?| null 的详细信息 | 什么是空引用?
要努力呀,为了想要的生活,为了人间的烟火,为了今天的风和月。
🎯作者主页: 追光者♂🔥
🌸个人简介:
💖[1] 计算机专业硕士研究生💖
🌟[2] 2022年度博客之星人工智能领域TOP4🌟
🏅[3] 阿里云社区特邀专家博主🏅
🏆[4] CSDN-人工智能领域优质创作者🏆
📝[5] 预期2023年10月份 · 准CSDN博客专家📝
- 无限进步,一起追光!!!
🍎感谢大家 点赞👍 收藏⭐ 留言📝!!!
🌿本篇综合了变量、运算符和计算机存储单位的重要概念。具体地,介绍了变量的作用和使用方法,涵盖了整型和浮点型变量,并讨论了计算机存储单位的转换。通过本篇内容,你将了解到这些基础概念对编写高效、准确的代码的重要性。
🕝目录
- 🍉一、变量和运算符——测试 整型和浮点型变量的使用
- 🍦1.1 整型变量:byte、short、int 和 long
- 🍦1.2 浮点型变量:float 与 double
- 🍚1.2.1 附:浮点型变量 表示精度 说明 (附:企业真题)
- 🍦1.3 测试
- 🍦1.4 附:计算机存储单位
🍉一、变量和运算符——测试 整型和浮点型变量的使用
🍦1.1 整型变量:byte、short、int 和 long
在Java中,整型变量用于存储整数值。Java提供了几种不同大小的整型变量类型,包括byte、short、int和long。下面是关于这些整型变量的使用的介绍:
byte
:
- 大小:8位,取值范围为 -128到127。
- 用途:通常用于节省内存,或者在处理二进制数据时使用。
short
:
- 大小:16位,取值范围为 -32768到32767。
- 用途:较少使用,通常被int或long代替。
int
:
- 大小:32位,取值范围为 -2147483648到2147483647。
- 用途:最常用的整型变量类型,通常用于存储整数值。
long
:
- 大小:64位,取值范围为
-9223372036854775808到9223372036854775807
。 - 用途:当需要表达较大范围的整数时使用。
可用一个生动的图来描述:
Java各整数类型 有固定的表数范围和字段长度,但不受具体操作系统的影响,从而保证Java程序的可移植性。(byte翻译即为 字节)
其它要补充的注意事项:
-
定义long类型的变量,赋值时需要以"
l
"或"L
"作为后缀。 -
Java程序中 变量
通常声明为
int型,除非 不足以表示较大的数,才使用long。 -
Java的整型
常量默认为 int 型
。
整型变量的声明和赋值示例:
int myInt = 100; // 声明一个名为myInt的int变量,并将其赋值为10
byte myByte = 52; // 声明一个名为myByte的byte变量,并将其赋值为5
long myLong = 10000000000L; // 声明一个名为myLong的long变量,并将其赋值为10000000000(注意后面的L表示这是一个long类型的字面值)
// 可以对整型变量进行数学运算
int result = myInt + 20; // 将myInt和20相加,并将结果赋值给result变量
🍦1.2 浮点型变量:float 与 double
在Java中,浮点型变量用于存储浮点数值,即带有小数部分的数字。Java提供了两种不同精度的浮点型变量类型:float和double
与整数类型类似,Java 浮点类型也有固定的 表示范围和字段长度,不受具体操作系统的影响。
- 浮点型常量有两种表示形式:
- 十进制数形式。如:10.24 256.0f .128 (注意:必须有小数点)
- 科学计数法形式。如:6.47e2 648E2 256E-2
- float:
单精度
,尾数可以精确到7位有效数字。很多情况下,精度很难满足需求。 ( 大小:32位) (取值范围:约±3.40282347E+38F(有效位数为6-7位)) (用途:当需要较小范围的浮点数或者节省内存时使用。) - double:
双精度
,精度是float的两倍。通常采用此类型。(大小:64位) (取值范围:约±1.79769313486231570E+308(有效位数为15位)) (用途:最常用的浮点型变量类型,通常用于存储浮点数。) - 定义float类型的变量,赋值时需要以"
f
"或"F
"作为后缀。 - Java 的浮点型
常量默认为double型
。
浮点型变量的声明和赋值示例:
double myDouble = 3.14; // 声明一个名为myDouble的double变量,并将其赋值为3.14
float myFloat = 1.23f; // 声明一个名为myFloat的float变量,并将其赋值为1.23(注意后面的f表示这是一个float类型的字面值)
// 可以对浮点型变量进行数学运算
double result = myDouble + 2.0; // 将myDouble和2.0相加,并将结果赋值给result变量
🍚1.2.1 附:浮点型变量 表示精度 说明 (附:企业真题)
-
并不是所有的小数 都能可以精确的用二进制浮点数表示。二进制浮点数 不能精确的表示
0.1、0.01、0.001
这样10的负次幂。 -
浮点类型float、double的数据不适合在
不容许舍入误差
的金融计算领域。如果需要精确
数字计算或保留指定位数的精度,需要使用BigDecimal类
。
事实上,不仅java语言如此,所有的编程语言都如此!
例如,来看下面的举例:
//测试1:(企业真题:为什么0.1 + 0.2不等于0.3?)
System.out.println(0.1 + 0.2);//0.30000000000000004
//测试2:
float ff1 = 123321123f;
float ff2 = ff1 + 1;
System.out.println(ff1);
System.out.println(ff2);
System.out.println(ff1 == ff2);
详细解释:
0.1 + 0.2 不等于 0.3 的原因与浮点数的精度和二进制表示方式有关。在计算机中,浮点数 使用二进制表示,而二进制无法准确地表示所有的十进制分数。
在这个特定的例子中,0.1 和 0.2 都是无限循环的 二进制小数。当计算机尝试将它们相加时,会导致一个舍入误差。这是因为这些十进制分数无法被精确地表示为有限的二进制位数。
具体来说,0.1 在二进制中是一个无限循环的数字
:0.0001100110011001100110011001100110011…(在32位浮点数表示中)。同样,0.2 也是一个无限循环的数字
:0.001100110011001100110011001100110011…。当计算机进行浮点数加法时,它会进行近似计算,并且只保留一定数量的有效位数。因此,结果可能存在舍入误差。
由于舍入误差的存在,0.1 + 0.2 的实际计算结果可能是接近 0.30000000000000004。这与我们期望的精确结果 0.3 不完全相同。这是浮点数运算中常见的问题,并且不仅限于Java,其他编程语言也存在类似的情况。
在编写代码时,如果需要精确的小数运算,可以使用 BigDecimal 类来进行高精度的计算。这个类提供了精确的十进制运算,但需要额外的计算开销和内存消耗。另外,在比较浮点数时,应该使用范围或误差允许的方式,而非直接的相等判断。
因此,0.1 + 0.2 不等于 0.3 是因为 浮点数的二进制表示和舍入误差 导致的。所以这警示我们:在进行浮点数运算和比较时,应该了解这些特点,并根据实际需求选择适当的处理方式。
补充说明:
浮点型变量 广泛用于需要存储小数的场景,例如科学计算、金融应用、图形处理等。
然而,由于浮点数的存储方式是二进制的近似表示
,可能会导致精度损失和舍入误差。在进行浮点数运算时,应注意这些问题,并根据需要选择恰当的变量类型和算法来处理浮点数。
🍦1.3 测试
变量的基本使用:(再写一遍,加深印象!)
/*
测试变量的基本使用
1. 变量的理解:内存中的一个存储区域,该区域的数据可以在同一类型范围内不断变化
2. 变量的构成包含三个要素:数据类型、变量名、存储的值
3. Java中变量声明的格式:数据类型 变量名 = 变量值
4. Java中的变量按照数据类型来分类:
基本数据类型(8种):
整型:byte \ short \ int \ long
浮点型:float \ double
字符型:char
布尔型:boolean
引用数据类型:
类(class)
数组(array)
接口(interface)
枚举(enum)
注解(annotation)
记录(record)
5. 定义变量时,变量名要遵循标识符命名的规则和规范。
6. 说明:
① 变量都有其作用域。变量只在作用域内是有效的,出了作用域就失效了。
② 在同一个作用域内,不能声明两个同名的变量
③ 定义好变量以后,就可以通过变量名的方式 对变量进行调用和运算。
④ 变量值在赋值时,必须满足变量的数据类型,并且在数据类型有效的范围内变化。
*/
class VariableTest {
public static void main(String[] args) {
//定义变量的方式1:
char gender; //过程1:变量的声明
gender = '男'; //过程2:变量的赋值(或初始化)
gender = '女';
//定义变量的方式2:声明与初始化合并
int age = 12;
System.out.println(age);
System.out.println("age = " + age);
System.out.println("gender = " + gender);
//在同一个作用域内,不能声明两个同名的变量
//char gender = '女';
gender = '男';
//由于number前没有声明类型,即当前number变量没有提前定义。所以编译不通过。
//number = 10;
byte b1 = 127;
//b1超出了byte的范围,编译不通过。
//b1 = 128;
}
public static void main123(String[] args) {
//System.out.println("gender = " + gender);
char gender = '女';
}
}
执行的结果如下:
整型和浮点型变量的使用:
/*
测试整型和浮点型变量的使用
*/
class IntandFloatTest1 {
public static void main(String[] args) {
//1.测试整型变量的使用
// byte(1字节=8bit) \ short(2字节) \ int(4字节) \ long(8字节)
byte b1 = 12;
byte b2 = 127;
//编译不通过。因为超出了byte的存储范围
//byte b3 = 128;
short s1 = 1234;
int i1 = 123456789;
//① 声明long类型变量时,需要提供后缀。后缀为'l'或'L'
long l1 = 123321336L;
//② 开发中,大家定义整型变量时,没有特殊情况的话,通常都声明为int类型。
//2.测试浮点类型变量的使用
//float \ double
double d1 = 12.3;
//① 声明long类型变量时,需要提供后缀。后缀为'f'或'F'
float f1 = 12.3f;
System.out.println("f1 = " + f1);
//② 开发中,大家定义浮点型变量时,没有特殊情况的话,通常都声明为double类型,因为精度更高。
//③ float类型 表示范围要大于long类型的表数范围。但是精度不高。
//测试 浮点型变量的精度
//结论:通过测试 发现浮点型变量的精度不高。如果在开发中,需要极高的精度,需要使用BigDecimal类替换浮点型变量。
//测试1
System.out.println(0.1 + 0.2);
//测试2:
float ff1 = 123321213f;
float ff2 = ff1 + 1;
System.out.println(ff1);
System.out.println(ff2);
System.out.println(ff1 == ff2);
}
}
来看执行的结果:(大家也可以通过调试代码,自行测试~)
🍦1.4 附:计算机存储单位
-
字节(Byte): 是计算机用于
计量存储容量
的基本
单位,一个字节等于8 bit。 -
位(bit): 是数据存储的
最小
单位。二进制数系统中,每个0或1就是一个位,叫做bit(比特),其中8 bit 就称为一个字节(Byte)。 -
转换关系:
- 8 bit = 1 Byte
- 1024 Byte = 1 KB
- 1024 KB = 1 MB
- 1024 MB = 1 GB
- 1024 GB = 1 TB
🍒 热门专栏推荐:
- 🥇Python&AI专栏:【Python从入门到人工智能】
- 🥈前端专栏:【前端之梦~代码之美(H5+CSS3+JS.】
- 🥉文献精读&项目专栏:【小小的项目 (实战+案例)】
- 🍎C语言/C++专栏:【C语言、C++ 百宝书】(实例+解析)
- 🍏Java系列(Java基础/进阶/Spring系列/Java软件设计模式等)
- 🌞问题解决专栏:【工具、技巧、解决办法】
- 📝 加入Community 一起追光:追光者♂社区
持续创作优质好文ing…✍✍✍
记得一键三连哦!!!
求关注!求点赞!求个收藏啦!