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

86. Java 数字和字符串 - 数字

文章目录

  • 86. Java 数字和字符串 - 数字
    • **一、引言:数字类的使用与包装**
    • **二、数字包装类:`Number `类及其子类**
      • **Number 类及其子类**
    • **三、为什么使用数字包装类?**
    • **四、Number 类的常用方法**
      • **1. 转换方法**
      • **2. 比较方法**
    • **五、数字与字符串的转换**
      • **常用的 `Integer` 方法**
    • **六、`PrintStream` 和 `DecimalFormat`:格式化输出**
      • **`PrintStream`**
      • **`DecimalFormat`**
    • **七、Math 类:数学函数**
    • **总结:**

86. Java 数字和字符串 - 数字

一、引言:数字类的使用与包装

大家好!今天我们将讨论 Java 中的数字处理,以及如何使用 数字包装类。在 Java 中,我们通常使用基元类型来处理数字,例如 intfloat,但是在某些情况下,我们需要将这些基元类型封装成对象,这就是数字包装类的作用。

数字包装类位于 java.lang 包下,主要用于包装基本数据类型为对象,使得它们可以作为对象传递给需要对象参数的方法。这样,Java 能够提供更多的功能,特别是通过这些类来进行数字的转换、比较和格式化输出等操作。


二、数字包装类:Number 类及其子类

在 Java 中,所有数字包装类都是 Number 的子类。Number 类本身是一个抽象类,不能直接实例化。它的主要作用是为所有的数字类型提供一些通用的操作方法,比如转换和比较等。

Number 类及其子类

Java 为每个基本数据类型提供了一个对应的包装类,下面是这些包装类的列表:

  • Byte - 对应 byte
  • Short - 对应 short
  • Integer - 对应 int
  • Long - 对应 long
  • Float - 对应 float
  • Double - 对应 double
  • Character - 对应 char

在这些类中,BigDecimalBigInteger 用于高精度计算,而 AtomicIntegerAtomicLong 则用于多线程环境下的操作。


三、为什么使用数字包装类?

使用包装类而不是基元类型的原因通常有三个:

  1. 作为需要对象的方法的参数:当我们需要将数字传递给需要对象的参数时,使用包装类是必要的。例如,Collections.sort() 方法需要传入 List<Integer>,而不能直接传入 int[]
  2. 使用由类定义的常量:每个包装类都定义了一些常量,例如 Integer.MIN_VALUEInteger.MAX_VALUE,它们提供了该数据类型的最大值和最小值。
  3. 使用类方法进行转换:包装类提供了将数字转换为其他类型或字符串的能力。比如,Integer.parseInt() 方法将字符串转换为 int,或者 Double.valueOf() 方法将 double 转换为 Double 对象。

四、Number 类的常用方法

每个数字包装类都继承了 Number 类 中的一些方法,这些方法可以用于将数字从一个类型转换到另一个类型。

1. 转换方法

Number 类提供了一些方法来将其值转换为基元类型的值:

  • byte byteValue() - 返回该 Number 对象的 byte 值。
  • short shortValue() - 返回该 Number 对象的 short 值。
  • int intValue() - 返回该 Number 对象的 int 值。
  • long longValue() - 返回该 Number 对象的 long 值。
  • float floatValue() - 返回该 Number 对象的 float 值。
  • double doubleValue() - 返回该 Number 对象的 double 值。
Integer myInt = 42;byte b = myInt.byteValue();
short s = myInt.shortValue();
int i = myInt.intValue();
long l = myInt.longValue();
float f = myInt.floatValue();
double d = myInt.doubleValue();System.out.println("Byte: " + b);
System.out.println("Short: " + s);
System.out.println("Int: " + i);
System.out.println("Long: " + l);
System.out.println("Float: " + f);
System.out.println("Double: " + d);

2. 比较方法

包装类还提供了用于比较数字的方法:

  • int compareTo(Byte anotherByte) - 比较当前数字与另一个 Byte 类型数字。
  • int compareTo(Double anotherDouble) - 比较当前数字与另一个 Double 类型数字。
  • int compareTo(Float anotherFloat) - 比较当前数字与另一个 Float 类型数字。
  • int compareTo(Integer anotherInteger) - 比较当前数字与另一个 Integer 类型数字。
  • int compareTo(Long anotherLong) - 比较当前数字与另一个 Long 类型数字。
  • int compareTo(Short anotherShort) - 比较当前数字与另一个 Short 类型数字。
  • boolean equals(Object obj) - 检查该数字是否等于传入的对象。
Integer a = 10;
Integer b = 20;System.out.println(a.compareTo(b)); // 输出 -1,因为 a < b
System.out.println(b.compareTo(a)); // 输出 1,因为 b > a
System.out.println(a.equals(10));   // 输出 true
System.out.println(a.equals(b));    // 输出 false

注意: equals(Object obj) 方法会检查两个数字是否相等,如果是相同类型且值相同,它会返回 true


五、数字与字符串的转换

Java 中,数字和字符串之间的转换非常常见。比如,我们可以将字符串解析为数字,或者将数字转换为字符串。

常用的 Integer 方法

  • static Integer decode(String s) - 将字符串解码为整数。支持十进制、八进制和十六进制数字。
  • static int parseInt(String s) - 返回解析后的整数值,适用于十进制字符串。
  • static int parseInt(String s, int radix) - 返回解析后的整数值,适用于指定基数的字符串(如二进制、八进制、十六进制)。
  • String toString() - 返回表示此 Integer 值的字符串。
  • static String toString(int i) - 将整数 i 转换为字符串。
  • static Integer valueOf(int i) - 返回一个包含 iInteger 对象。
  • static Integer valueOf(String s) - 将字符串 s 解析为 Integer 对象。
  • static Integer valueOf(String s, int radix) - 将字符串 s 解析为指定基数的 Integer 对象。
// decode
Integer hex = Integer.decode("0x1A");
System.out.println("Hex decode: " + hex); // 输出 26// parseInt
int parsed = Integer.parseInt("123");
System.out.println("Parsed int: " + parsed); // 输出 123// parseInt with radix
int binary = Integer.parseInt("1010", 2);
System.out.println("Binary 1010 to int: " + binary); // 输出 10// toString
Integer value = 456;
System.out.println("toString: " + value.toString()); // 输出 "456"
System.out.println("toString static: " + Integer.toString(789)); // 输出 "789"// valueOf
Integer obj1 = Integer.valueOf(100);
Integer obj2 = Integer.valueOf("200");
Integer obj3 = Integer.valueOf("FF", 16); // 16进制 FF -> 255System.out.println("valueOf int: " + obj1);
System.out.println("valueOf String: " + obj2);
System.out.println("valueOf with radix: " + obj3);

六、PrintStreamDecimalFormat:格式化输出

在很多情况下,我们不仅要处理数字,还要将其格式化输出。Java 提供了 PrintStreamDecimalFormat 类来处理这些任务。

PrintStream

PrintStream 是用于将数据输出到控制台的流,通常用于格式化输出:

System.out.printf("The value is: %.2f\n", 3.14159);

这将打印:The value is: 3.14

DecimalFormat

DecimalFormat 类可以根据用户指定的模式格式化数字。例如:

DecimalFormat df = new DecimalFormat("#.##");
System.out.println(df.format(3.14159));  // 输出:3.14

七、Math 类:数学函数

Math 类包含了许多数学函数,这些函数是对 Java 内置运算符的补充。常用的函数包括:

  • Math.sqrt(double a) - 计算平方根。
  • Math.pow(double a, double b) - 计算 ab 次方。
  • Math.sin(double a) - 计算弧度 a 的正弦值。
  • Math.cos(double a) - 计算弧度 a 的余弦值。

例如,计算圆的面积:

double a = 9.0;
double b = 2.0;System.out.println("平方根: " + Math.sqrt(a)); // 输出 3.0
System.out.println("次方: " + Math.pow(a, b)); // 输出 81.0
System.out.println("正弦: " + Math.sin(Math.PI / 2)); // 输出 1.0
System.out.println("余弦: " + Math.cos(0)); // 输出 1.0

这会输出圆的面积。


总结:

今天,我们学习了 Java 中的数字处理,包括:

  1. 数字包装类,如 IntegerDouble 等,它们封装了基本数据类型的值。
  2. 使用 Number 和其子类进行类型转换和数字比较。
  3. PrintStreamDecimalFormat 用于格式化输出数字。
  4. Math 提供了许多数学运算方法。

这些工具和类将帮助你更好地处理数字,提高代码的可读性和效率。

http://www.xdnf.cn/news/8588.html

相关文章:

  • Doris ClickHouse Greenplum 对比
  • 6.3.2图的深度优先遍历
  • 跨模态行人检索方法综述(上)
  • 使用YouDDNS-Docker为飞牛NAS配置YouDDNS动态域名解析
  • 如何选用正确的html元素
  • 2025年渗透测试面试题总结-匿名[社招]安全工程师(中级红队)(题目+回答)
  • 《Python语言程序设计》第4章第8题3个个位数之间比大小。‘a小于b而b大于c’这是最有漏洞的一个对比,请问我如何判断a和c
  • DeepSeek智能对话助手项目
  • 对神经正切核的理解和推导(1)
  • MRI大型数据集FastMRI介绍
  • Spring Boot中使用AMQP协议与RabbitMQ
  • 考研408《计算机组成原理》复习笔记,第二章(3)数值数据的运算和存储(定点数计算)
  • 【C】中断处理函数模板
  • JavaScript- 2.2 内置对象MATH
  • 精益数据分析(84/126):打造商业造钱机器——从融资思维到盈利模型的落地实践
  • Go核心特性与并发编程
  • 基于Springboot + vue3实现的养老系统
  • Java多线程编程最佳实践
  • 展示了一个三轴(X, Y, Z)坐标系!
  • RAID技术全解析:从基础到实战应用指南
  • 学习STC51单片机14(芯片为STC89C52RC)
  • OpenLayers 加载鹰眼控件
  • Kotlin中let、run、with、apply及also的差别
  • SQL 语言
  • 策略建模:AI系统背后的“心灵感应”技术
  • 一文快速了解Vue3服务端渲染(SSR)
  • Windows逆向工程提升之IMAGE_RESOURCE_DIRECTORY
  • linux taskset 查询或设置进程绑定CPU
  • Vue3的模块化设计: 使用Script Setup API
  • 人脸美颜磨皮祛痘3:深度学习SUNet神经网络实现图片修复(含训练代码、数据集和GUI交互界面)