目录
Number类
扩展小知识
Math类
实例
Number类
Java中的Number类是一个抽象类,它是所有包装类(如Integer、Double、Long等)的父类。这个类提供了将基本数据类型(如int、double、long等)封装为对象,并在对象中进行数字值的操作。
包装类 | 基本数据类型 |
---|---|
Boolean | boolean |
Byte | byte |
Short | short |
Integer | int |
Long | long |
Character | char |
Float | float |
Double | double |
Number 类的一些常用方法包括:
xxxValue()
:将 Number 对象转换为对应数据类型的值。(xxx为基本数据类型)compareTo()
:将 Number 对象与参数进行比较。equals()
:判断 Number 对象是否与参数相等。valueOf()
:返回指定内置数据类型的 Number 对象。toString()
:以字符串形式返回值。parseInt()
:将字符串解析为 int 类型。
这些方法允许你在不同的数值类型之间进行转换,并且每个子类需要实现这些方法以提供适当的转换行为。
扩展小知识
在Java中,将基本数据类型转换为其对应的包装类对象的过程称为装箱(Boxing),而将包装类对象转换为基本数据类型的过程称为拆箱(Unboxing)。
- 编译器会自动处理装箱和拆箱的过程,在需要时将基本类型和包装类之间进行转换。这样就可以像操作对象一样使用基本数据类型,同时还可以享受到包装类提供的额外功能,提高代码的简洁性和可读性,使操作更加便捷。
- 手动装箱和拆箱需要显式地调用相应的方法进行转换,相比于自动装箱和拆箱,代码更加繁琐。但手动装箱和拆箱提供了更精确的控制,适用于一些特殊情况下的操作。
// 自动装箱和拆箱示例
int num = 10;
Integer wrappedNum = num; // 自动装箱,将int类型的num装箱为Integer对象
double value = 3.14;
Double wrappedValue = value; // 自动装箱,将double类型的value装箱为Double对象
boolean flag = true;
Boolean wrappedFlag = flag; // 自动装箱,将boolean类型的flag装箱为Boolean对象
System.out.println(wrappedNum); // 输出:10
System.out.println(wrappedValue); // 输出:3.14
System.out.println(wrappedFlag); // 输出:true
int unwrappedNum = wrappedNum; // 自动拆箱,将Integer对象wrappedNum拆箱为int类型的unwrappedNum
double unwrappedValue = wrappedValue; // 自动拆箱,将Double对象wrappedValue拆箱为double类型的unwrappedValue
boolean unwrappedFlag = wrappedFlag; // 自动拆箱,将Boolean对象wrappedFlag拆箱为boolean类型的unwrappedFlag
System.out.println(unwrappedNum); // 输出:10
System.out.println(unwrappedValue); // 输出:3.14
System.out.println(unwrappedFlag); // 输出:true
-----------------------------------------------------------------------------------------
// 手动装箱和拆箱示例
int num = 10;
Integer wrappedNum = Integer.valueOf(num); // 手动装箱,使用valueOf方法将int类型的num装箱为Integer对象
double value = 3.14;
Double wrappedValue = Double.valueOf(value); // 手动装箱,使用valueOf方法将double类型的value装箱为Double对象
boolean flag = true;
Boolean wrappedFlag = Boolean.valueOf(flag); // 手动装箱,使用valueOf方法将boolean类型的flag装箱为Boolean对象
System.out.println(wrappedNum); // 输出:10
System.out.println(wrappedValue); // 输出:3.14
System.out.println(wrappedFlag); // 输出:true
int unwrappedNum = wrappedNum.intValue(); // 手动拆箱,使用intValue方法将Integer对象wrappedNum拆箱为int类型的unwrappedNum
double unwrappedValue = wrappedValue.doubleValue(); // 手动拆箱,使用doubleValue方法将Double对象wrappedValue拆箱为double类型的unwrappedValue
boolean unwrappedFlag = wrappedFlag.booleanValue(); // 手动拆箱,使用booleanValue方法将Boolean对象wrappedFlag拆箱为boolean类型的unwrappedFlag
System.out.println(unwrappedNum); // 输出:10
System.out.println(unwrappedValue); // 输出:3.14
System.out.println(unwrappedFlag); // 输出:true
Number
类属于java.lang
包,是一个抽象类,定义了所有数值包装类的共同行为。它作为其他具体数值包装类(如Integer
、Double
、Long
等)的父类,提供了一些通用的方法和属性。通过使用Number
及其子类,我们可以在需要处理数值的场景中更方便地进行装箱和拆箱操作。
Math类
Math
类是一个工具类,提供了执行常见数学运算的静态方法。它包含了许多用于执行基本数学运算的方法,例如求绝对值、取最大/最小值、四舍五入、三角函数、指数和对数运算等。
以下是一些 Math 类的常用方法:
abs(double a)
:返回参数的绝对值。ceil(double a)
:返回大于等于给定参数的最小整数,类型为双精度浮点型。floor(double a)
:返回小于等于给定参数的最大整数。rint(double a)
:返回与参数最接近的整数,返回类型为 double。round(float a)
:四舍五入,将原来的数字加上 0.5 后再向下取整,返回类型为 int。max(double a, double b)
:返回两个参数中的最大值。min(double a, double b)
:返回两个参数中的最小值。exp(double a)
:返回自然数底数e的参数次方。log(double a)
:返回参数的自然对数值。pow(double a, double b)
:返回第一个参数的第二个参数次方。sqrt(double a)
:求参数的算术平方根。sin(double a)
:求指定double类型参数的正弦值。cos(double a)
:求指定double类型参数的余弦值。tan(double a)
:求指定double类型参数的正切值。asin(double a)
:求指定double类型参数的反正弦值。acos(double a)
:求指定double类型参数的反余弦值。atan(double a)
:求指定double类型参数的反正切值。random()
:返回一个随机数,范围在0.0到1.0之间。
通过使用Math
类的这些方法,可以执行基本的数学运算,例如绝对值计算、取最大/最小值、四舍五入、三角函数计算以及指数和对数运算等。
这些只是Number
类和Math
类提供的一些常用方法示例,实际上还有其他更多的方法可供使用。它们在Java编程中非常有用,并且可以轻松处理数字和执行数学计算。
实例
public class MyClass {
public static void main(String[] args) {
// 使用 Number 类的方法示例
Number number = 10.5;
// 转换为 int 类型
int intValue = number.intValue();
System.out.println("intValue: " + intValue);
// 比较两个数是否相等
boolean isEqual = number.equals(10.5);
System.out.println("isEqual: " + isEqual);
// 转换为字符串
String stringValue = number.toString();
System.out.println("stringValue: " + stringValue);
// 使用 Math 类的方法示例
double x = 2.3;
double y = 4.7;
// 返回较大的数
double max = Math.max(x, y);
System.out.println("max: " + max);
// 返回较小的数
double min = Math.min(x, y);
System.out.println("min: " + min);
// 计算绝对值
double absValue = Math.abs(-10.8);
System.out.println("absValue: " + absValue);
// 对数运算
double logValue = Math.log(2.0);
System.out.println("logValue: " + logValue);
// 平方根
double sqrtValue = Math.sqrt(16.0);
System.out.println("sqrtValue: " + sqrtValue);
// 随机数生成
double randomValue = Math.random();
System.out.println("randomValue: " + randomValue);
}
}
编译以上程序,输出结果为: