包装类

java包装类

一般地,当需要使用数字的时候,通常使用基本数据类型,如:byte,int,double等。
然而在实际的开发中,经常会遇到需要使用对象,所以,java语言为你每一个基本数据类型提供了对应的包装类。

包装类基本数据类型
Booleanboolean
Bytebyte
Shortshort
Integerint
Longlong
Floatfloat
Doubledouble
Characterchar

在这里插入图片描述

Java 的包装类有两个主要的目的:

  • Java包装类将基本数据类型的值“包装”到对象中,对基本数据类型的操作变为了对对象进行操作,从而使基本值能够包含在为对象为保留的操作中。比如向Collections中添加元素(泛型的操作限制加入的只能是对象,比如List = new ArrayList() 的写法是错误的),或者从带对象返回值的方法中返回。
  • 更加方便类型的转换,如常见的Integer向字符的转换

装箱和拆箱

装箱:
  将基本数据类型封装为包装类对象,利用每一个包装类提供的构造方法实现装箱操作。
  
拆箱:
  将包装类中包装的基本数据类型数据取出。

// 装箱
Integer integer1 = new Integer(1);
// 拆箱
int integer2 = integer1.intValue(); 

装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的xxxValue方法实现的。(xxx代表对应的基本数据类型)。

JDK1.5之后提供了自动装箱和拆箱

// 自动装箱
Integer integer1 = 1;
// 自动拆箱
int integer2 = integer1; 

面试题

public class Main {
    public static void main(String[] args) {
        Integer i1 = 100;
        Integer i2 = 100;
        Integer i3 = new Integer(100);
        Integer i4 = new Integer(100);
      
        System.out.println(i1==i2);//true
        System.out.println(i1==i3);//false
        System.out.println(i3==i4);//false
        System.out.println(i1.equals(i2));//true
        System.out.println(i1.equals(i3));//true
        System.out.println(i3.equals(i4));//true
    }
}

==和equals的区别:

类型==equals
基本类型不可用
引用类型地址内容

注意,Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现是类似的,因为他们都实现了常量池技术,Double、Float的valueOf方法的实现是类似的,并没有实现常量池技术。
Q:那么为什么这里要将值存储在常量池中呢?
A:速度更快,常量池引入的目的是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。这是一种 享元模式 的实现。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值