Java八种基本数据类型包装类及其方法理解

包装类及其常用方法理解

1.什么是包装类

Java的包装类是Java语言中提供的一种机制,用于将基本数据类型(如int、float、double等)封装成对应的对象。这样做的好处是,可以使得基本数据类型能够拥有对象的特性,例如可以被用作集合的元素、可以有方法调用等。Java为每种基本数据类型提供了对应的包装类:

Integer:对应基本数据类型int
Double:对应基本数据类型double
Float:对应基本数据类型float
Long:对应基本数据类型long
Short:对应基本数据类型short
Byte:对应基本数据类型byte
Character:对应基本数据类型char
Boolean:对应基本数据类型boolean

包装类提供了一些有用的方法,例如用于转换类型的方法、比较方法等。此外,包装类还实现了Comparable接口,允许对对象进行比较。

2.自动装箱和自动拆箱

2.1自动装箱

自动装箱(Autoboxing)是Java 5引入的一项特性,它允许自动将基本数据类型转换为相应的包装类对象。这种转换在编译时自动发生,无需程序员显式地进行。自动装箱提供了一种方便的方法,使得基本数据类型可以被当作对象来处理,特别是在使用Java集合框架时。

2.2自动拆箱

与自动装箱相对应,自动拆箱(Unboxing)是指在需要基本数据类型的地方,自动将包装类对象转换为基本数据类型。这同样在编译时自动完成,允许程序员在不显式进行类型转换的情况下,直接使用包装类对象的值。

2.3示例代码

自动装箱示例:

public class AutoboxingExample {
    public static void main(String[] args) {
        int primitiveInt = 10; // 基本数据类型
        Integer boxedInt = primitiveInt; // 自动装箱,将int转换为Integer对象

        System.out.println(boxedInt); // 输出Integer对象的字符串表示
    }
}

自动拆箱示例:

public class UnboxingExample {
    public static void main(String[] args) {
        Integer boxedInt = new Integer(20); // Integer对象
        int primitiveInt = boxedInt; // 自动拆箱,将Integer对象转换为int

        System.out.println(primitiveInt); // 输出基本数据类型int的值
    }
}

2.4自动装箱与自动拆箱的内部机制

自动装箱实际上是通过调用包装类的valueOf方法实现的。
自动拆箱实际上是通过调用包装类的xxxValue()方法实现的,例如intValue(), doubleValue()等。

2.5自动装箱与自动拆箱的注意事项

1.自动装箱和拆箱虽然方便,但可能会影响程序的性能,尤其是在循环内部进行大量装箱和拆箱操作时。
2.自动装箱可能导致NullPointerException,因为如果将null赋给基本数据类型的包装类变量,将会引发异常。
3.自动拆箱时,如果包装类对象为null,也会抛出NullPointerException。

3.包装类的常用方法

3.1 ValueOf()方法

public static Integer valueOf(int i) 根据传递的整数创建一个Integer对象
public static Integer valueOf(String s) 根据传递的字符串创建一个Integer对象

Integer i1 = Integer.valueOf(123);
Integer i2 = Integer.valueOf("hi");

3.2 toXxxString()

public static String toBinaryString(int i) 得到二进制
public static String toOctalString(int i) 得到八进制
public statid String toHexString(int i) 得到十六进制
public static int parselnt(String s) 将字符串类型的整数转成int类型的整数

//将整数转换为八进制,返回的是String类型
String str2 = Integer.toOctalString(i: 100); 
System.out.println(str2);//144

3.3 parseXxx()方法

将字符串类型的整数转成int类型的整数
在8种包装类当中,除了Character都有对应的parseXxx的方法,进行类型转换

int i = Integer.parseInt(s: "123"); 
System.out.println(i);

3.4 toString() 方法

toString() 是Java中所有对象共有的方法,包装类也不例外。它返回包装类对象的字符串表示形式。对于包装类来说,这个字符串表示其基本数据类型的值。

public class ToStringExample {
    public static void main(String[] args) {
        Integer num = 100;
        System.out.println(num.toString()); // 输出 "100"
    }
}

3.5 equals() 方法

equals() 方法用于比较两个对象是否相等。在包装类中,equals() 方法比较的是两个对象的值是否相等,而不是它们的引用地址。这对于基本数据类型的包装类来说非常有用,因为它们可以被用于集合中,而集合通常需要比较对象的值。

public class EqualsExample {
    public static void main(String[] args) {
        Integer a = 100;
        Integer b = 100;
        Integer c = new Integer(100);

        System.out.println(a.equals(b)); // 输出 true
        System.out.println(a.equals(c)); // 输出 true
    }
}

3.6 compareTo() 方法

compareTo() 方法用于比较两个包装类对象的值。它返回一个整数,表示调用对象与参数对象的比较结果。如果调用对象的值小于参数对象的值,则返回负数;如果相等,则返回0;如果调用对象的值大于参数对象的值,则返回正数。

public class CompareToExample {
    public static void main(String[] args) {
        Integer a = 10;
        Integer b = 20;

        int result = a.compareTo(b);
        if (result < 0) {
            System.out.println(a + " is less than " + b);
        } else if (result > 0) {
            System.out.println(a + " is greater than " + b);
        } else {
            System.out.println(a + " is equal to " + b);
        }
    }
}

3.7 其他实用方法

除了 toString(), equals(), 和 compareTo() 方法外,包装类还提供了一些其他有用的方法,例如:
intValue(), doubleValue(), floatValue(), longValue(), byteValue(), shortValue(), booleanValue():这些方法将包装类对象转换回基本数据类型。
hashCode():返回对象的哈希码,通常用于哈希表。
valueOf():将基本数据类型转换为相应的包装类对象。
parseXxx():将字符串解析为基本数据类型,例如 Integer.parseInt()。

public class OtherMethodsExample {
    public static void main(String[] args) {
        Integer num = 200;
        System.out.println(num.intValue()); // 输出基本类型 int
        System.out.println(num.doubleValue()); // 输出基本类型 double

        String str = "300";
        Integer parsedNum = Integer.valueOf(str);
        System.out.println(parsedNum); // 输出 Integer对象 300

        System.out.println(num.hashCode()); // 输出 num的哈希码
    }
}

4.注意事项

问:如何获取包装类对象?
答:不需要new,不需要调用方法,直接赋值即可。即 Integer i = 10;

Integer i6 = Integer.valueOf(127); 
Integer i7 = Integer.valueOf(127); 
System. out. println(i6==i7);   //true

Integer i8 = Integer.valueOf(128); 
Integer i9 = Integer.valueOf(128); 
System. out. println(i8 == i9);  //false

产生这样子的结果的原因是:在代码底层 -128~127 这个区间的数据会提前创建对象放在数组中,当使用valueOf方法时,在这个区间就会直接调用,而不是去创建一个新的地址用于存放此数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值