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

文章目录

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 值。
java 复制代码
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) - 检查该数字是否等于传入的对象。
java 复制代码
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 对象。
java 复制代码
// 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 -> 255

System.out.println("valueOf int: " + obj1);
System.out.println("valueOf String: " + obj2);
System.out.println("valueOf with radix: " + obj3);

六、PrintStreamDecimalFormat:格式化输出

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

PrintStream

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

java 复制代码
System.out.printf("The value is: %.2f\n", 3.14159);

这将打印:The value is: 3.14

DecimalFormat

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

java 复制代码
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 的余弦值。

例如,计算圆的面积:

java 复制代码
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 提供了许多数学运算方法。

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

相关推荐
皮皮林5515 小时前
IDEA 源码阅读利器,你居然还不会?
java·intellij idea
卡尔特斯9 小时前
Android Kotlin 项目代理配置【详细步骤(可选)】
android·java·kotlin
白鲸开源9 小时前
Ubuntu 22 下 DolphinScheduler 3.x 伪集群部署实录
java·ubuntu·开源
ytadpole9 小时前
Java 25 新特性 更简洁、更高效、更现代
java·后端
纪莫10 小时前
A公司一面:类加载的过程是怎么样的? 双亲委派的优点和缺点? 产生fullGC的情况有哪些? spring的动态代理有哪些?区别是什么? 如何排查CPU使用率过高?
java·java面试⑧股
JavaGuide10 小时前
JDK 25(长期支持版) 发布,新特性解读!
java·后端
用户37215742613511 小时前
Java 轻松批量替换 Word 文档文字内容
java
白鲸开源11 小时前
教你数分钟内创建并运行一个 DolphinScheduler Workflow!
java
Java中文社群11 小时前
有点意思!Java8后最有用新特性排行榜!
java·后端·面试
代码匠心11 小时前
从零开始学Flink:数据源
java·大数据·后端·flink