86. Java 数字和字符串 - 数字
文章目录
- 86. Java 数字和字符串 - 数字
- **一、引言:数字类的使用与包装**
- **二、数字包装类:`Number `类及其子类**
- **Number 类及其子类**
- **三、为什么使用数字包装类?**
- **四、Number 类的常用方法**
- **1. 转换方法**
- **2. 比较方法**
- **五、数字与字符串的转换**
- **常用的 `Integer` 方法**
- **六、`PrintStream` 和 `DecimalFormat`:格式化输出**
- **`PrintStream`**
- **`DecimalFormat`**
- **七、Math 类:数学函数**
- **总结:**
86. Java 数字和字符串 - 数字
一、引言:数字类的使用与包装
大家好!今天我们将讨论 Java
中的数字处理,以及如何使用 数字包装类。在 Java 中,我们通常使用基元类型来处理数字,例如 int
或 float
,但是在某些情况下,我们需要将这些基元类型封装成对象,这就是数字包装类的作用。
数字包装类位于 java.lang
包下,主要用于包装基本数据类型为对象,使得它们可以作为对象传递给需要对象参数的方法。这样,Java 能够提供更多的功能,特别是通过这些类来进行数字的转换、比较和格式化输出等操作。
二、数字包装类:Number
类及其子类
在 Java 中,所有数字包装类都是 Number
类 的子类。Number
类本身是一个抽象类,不能直接实例化。它的主要作用是为所有的数字类型提供一些通用的操作方法,比如转换和比较等。
Number 类及其子类
Java 为每个基本数据类型提供了一个对应的包装类,下面是这些包装类的列表:
Byte
- 对应byte
Short
- 对应short
Integer
- 对应int
Long
- 对应long
Float
- 对应float
Double
- 对应double
Character
- 对应char
在这些类中,BigDecimal
和 BigInteger
用于高精度计算,而 AtomicInteger
和 AtomicLong
则用于多线程环境下的操作。
三、为什么使用数字包装类?
使用包装类而不是基元类型的原因通常有三个:
- 作为需要对象的方法的参数:当我们需要将数字传递给需要对象的参数时,使用包装类是必要的。例如,
Collections.sort()
方法需要传入List<Integer>
,而不能直接传入int[]
。 - 使用由类定义的常量:每个包装类都定义了一些常量,例如
Integer.MIN_VALUE
和Integer.MAX_VALUE
,它们提供了该数据类型的最大值和最小值。 - 使用类方法进行转换:包装类提供了将数字转换为其他类型或字符串的能力。比如,
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)
- 返回一个包含i
的Integer
对象。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);
六、PrintStream
和 DecimalFormat
:格式化输出
在很多情况下,我们不仅要处理数字,还要将其格式化输出。Java 提供了 PrintStream
和 DecimalFormat
类来处理这些任务。
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)
- 计算a
的b
次方。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 中的数字处理,包括:
- 数字包装类,如
Integer
、Double
等,它们封装了基本数据类型的值。 - 使用
Number
类 和其子类进行类型转换和数字比较。 PrintStream
和DecimalFormat
用于格式化输出数字。Math
类 提供了许多数学运算方法。
这些工具和类将帮助你更好地处理数字,提高代码的可读性和效率。