Java需要包装类
首先,程序员遇到的问题是,当我们拥有原始数据类型时,为什么在Java需要包装类的概念。这是因为在使用时,Wrapper 类中的附加功能超过了原始数据类型。这些方法主要包括valueOf() 、 parseInt() 、 toString()等方法。
包装类包裹(包围)一个数据类型并赋予它一个对象外观。包装类是最终的和不可变的。包装类中有两个概念,即自动装箱和拆箱。
自动装箱是将原始值转换为相应包装类的对象的过程称为自动装箱。例如,将 int 转换为 Integer 类。 Java编译器适用自动装箱时,原始值是:
- 作为参数传递给需要相应包装器类的对象的方法。
- 分配给相应包装类的变量。
开箱 将包装类型的对象转换为其相应原始值的过程称为拆箱。例如整数到整数的转换。 Java编译器适用拆箱时的包装类的对象是:
- 作为参数传递给需要相应原始类型值的方法。
- 分配给相应原始类型的变量。
Autoboxing and unboxing are pictorially depicted below:
现在让我们开始讨论包装类的有用特性,它们如下所列:
- 它们将原始数据类型转换为对象。如果我们希望修改传递给方法的参数,则需要对象(因为原始类型是按值传递的)。
- Java.util 包中的类只处理对象,因此包装类在这种情况下也有帮助。
- Collection 框架中的数据结构,例如 ArrayList 和 Vector,只存储对象(引用类型)而不存储原始类型。
- 需要一个对象来支持多线程中的同步。
包装类提供的主要重要特性之一是许多实用方法。假设我们有一个浮点值,并且我们想要找到该浮点数的整数值,那么我们有一个特定的方法,如下图所示。
插图:
如果我们想创建一个字符串或者一个字符串的布尔值的整数值。我们可以在包装类的帮助下做到这一点。
语法:从其他数据类型创建
Integer hundred = Integer.valueOf("100");
Boolean value = Boolean.valueOf("True");
例子:
Java
// Java Program to Show Wrapper class concept
// Importing input output classes
import java.io.*;
// Main Class
class GFG {
// Main driver method
public static void main(String[] args)
{
// In java, in case f floating values
// they are stored as x = (y)f
// Conversion of float value to int
Float floatWrap = Float.valueOf(45.158f);
// Invoking the intValue() method over the stored
// float value to store
int floatToInt = floatWrap.intValue();
// Print the non-primitive(Integer) value
System.out.println(floatToInt);
// Now for another number N
// Say N = 5
// Convert the binary number to the integer value
Integer five = Integer.valueOf("101", 2);
// Print the number
System.out.println(five);
}
}
输出
45
5