程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2023-06(3)

包装类

发布于2020-11-19 20:47     阅读(986)     评论(0)     点赞(12)     收藏(1)


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:速度更快,常量池引入的目的是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。这是一种 享元模式 的实现。



所属网站分类: 技术文章 > 博客

作者:gogogo

链接:http://www.javaheidong.com/blog/article/842/138801b9d38434cfd9b3/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

12 0
收藏该文
已收藏

评论内容:(最多支持255个字符)