首页 > 其他分享 >Day32:包装类详解

Day32:包装类详解

时间:2022-12-05 23:35:55浏览次数:44  
标签:String 包装 valueOf Day32 int 详解 类型 Integer

包装类

1.1 包装类概述

基本数据类型值对应的引用数据类型称为包装类。

由于我们的基本数据类型是不作为对象使用的,但是很多时候会用到对象作为参数,Java提供了包装类将基本数据类型包装为一个对象。

每个基本数据类型都有对应的包装类,默认值为null

byte——Byte Byte类将基本类型byte的值包装在一个对象中

short——Short

int——Integer

long——Long

float——Float

double——Double

char——Charactar

boolean——Boolean

除了intchar之外,其他基本类型的包装类与对应的基本数据类型名是一样的,且首字母均为大写。

1.2 类型转换之装箱、拆箱

我们先对装箱、拆箱进行内存分析

1.2.1 类型转换之装箱

装箱即将基本类型转换为引用类型。

我们以int类型为例作为示范

int类型的包装类为Integer类;如何将int类型转为Integer类型呢?

  • 方法一:通过Integer类的构造方法:Integer(int value)

  • 方法二:通过Integer类的valueOf方法(静态方法)将int类的值作为参数即可实现:valueOf(int i)

public class Test{
    public static void main(String[] args){
    int a=10;
    Integer i1=new Integer(a);//通过Integer的构造器传参来实现装箱
    Integer i2=Integer.valueOf(a);//调用Integer.valueOf方法,返回一个 Integer指定的 int值的 Integer实例
    Integer i3=Integer.valueOf(10);
    }
}

1.2.2 类型转换之拆箱

拆箱即将引用类型转为基本类型

我们以int类型为例作为示范

  • 通过Integer类的intValue方法(非静态方法,为实例所用):intValue() :将 Integer的值作为 int
public class Test{
    public static void main(String[] args){
    int a=10;
    Integer i2=Integer.valueOf(a);//调用Integer.valueOf方法实现基本类型的装箱
    int a1=i2.intValue();//通过Integer实例对象调用intValue方法进行拆箱
    }
}

1.2.3 自动装箱、拆箱

JDK1.5 之后便支持自动装箱、拆箱

public class Test{
    public static void main(String[] args){
    int a=10;
    Integer i2=a;//自动装箱
    int b=i2;//自动拆箱
    }
}

1.3 类型之间的相互转换

基本类型与字符串可以进行相互转换;

我们以int类型和String类型之间转换为例

public class Test{
    public static void main(String[] args){
        //int类型转为String类型
        int a=10;
        //第一种方式:通过+号
        String st1=a+" ";
        System.out.println(st1);//10
        //第二种方式:(静态方法)toString();   通过int包装类调用来实现转型
        String st2=Integer.toString(a);
        System.out.println(st2);//10
        //拓展
        //int包装类中toString();重载方法 可以计算整数类型的不同进制下的值
        //计算16在十六进制前的值
        System.out.println(Integer.toString(16));//10
        
        
        
        //字符串转为int类型   
         String st3="19971007";
        //此时为字符串形式;  注意如果字符串要转为int型,那么他的字符串内容一定只能是int型的,否则抛出异常NumberFormatException
        //转型方法:Integer.paseInt(); 静态方法  转什么型用什么型的包装类进行调用方法
         int a3=Integer.parseInt(st3);
         System.out.println(a3);//19971007
        
        //拓展
        /*字符串转为基本类型中,boolean型是比较特殊的,因为boolean型的值只有ture以及false,
        当我们将字符串进行转型的时候,只有字符串的内容为"true"时才会转为"true",当字符串中内容为false,或者说是为非true时,转回来时均为false
        */
        
        String st4="true";
        String st5-="工地佬"
        boolean b=Boolean.paseBoolean(st4);
        System.out.println(b);//true.
        System.out.println(Boolean.paseBooleam(st5));//false
        
    }
}

1.4 整数缓冲区

在整数包装类中valueOf方法创建的实例可被享用,整数区间值在-128-127;一旦超出范围,将不再共享。

public class Test{
    public static void main(String[] args){
        //通过构造方法实例的包装类对象是独立的,不会共享
        Integer i1=new Integer(10);
        Integer i2=new Integer(10);
        System.out.println(i1==i2);//false
        //"=="对于基本类型而言比较的是值,对于引用类型而言对比的是堆内存地址;i1和i2均是new出来的,内存地址必然不同,也就不会相等!
        
        
        //通过valueOf实例的对象在整数缓冲区是会共享的
        Integer a=Integer.valueOf(88);
        Integer b=Integer.valueOf(88);
        Integer c=Integer.valueOf(200);
        Integer d=Integer.valueOf(200);
        System.out.println(a==b);//true   88在valueOf的整数缓冲区内,对象共享
        System.out.println(c==d);//false  200不在valueOf的整数缓冲区内,便会新建堆内存,则内存地址也就不一致了,自然不会相等!
    }
}

标签:String,包装,valueOf,Day32,int,详解,类型,Integer
From: https://www.cnblogs.com/CQliuwei/p/16953886.html

相关文章

  • 动态规划详解
    P1470[USACO2.3]最长前缀LongestPrefix这道题目感觉和  P1832A+BProblem(再升级)有点类似。将一个合法答案再加上另外一个合法答案组成新的组合,而这个组合一定合法......
  • LeetCode刷题记录.Day32
    翻转二叉树递归法classSolution{public:TreeNode*invertTree(TreeNode*root){if(root==nullptr)returnroot;swap(root->left,root->......
  • day32-JQuery05
    jQuery059.作业9.1homework01对多选框进行操作,输出选中的多选框的个数,并且把选中爱好的名称显示。<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-......
  • C# 实现reportview的操作,详解。
    https://blog.csdn.net/xufengab/article/details/123416231一、vs2015中没有reportview组件,需要安装。在VS中选择工具——Nuget包管理器——程序包管理器控制台执行命......
  • 3M EDI 850 采购订单报文详解
    3M公司素以勇于创新、产品繁多著称于世,在其百多年历史中开发了6万多种高品质产品。百年来,3M的产品已深入人们的生活,从家庭用品到医疗用品,从运输、建筑到商业、教育和电子、......
  • 【转载】详解mysql插入数据后返回自增ID的七种方法_java
    引言mysql和oracle插入的时候有一个很大的区别是:oracle支持序列做id;mysql本身有一个列可以做自增长字段。mysql在插入一条数据后,如何能获得到这个自增id的......
  • js apply()用法详解
              参考:https://blog.csdn.net/weixin_43877799/article/details/120282509......
  • 全志V853平台Camera模块开发框架详解
    Camera本章节介绍V853平台Camera模块的开发。V853支持并口CSI、MIPI,使用VINcamera驱动框架。Camera通路框架VIN支持灵活配置单/双路输入双ISP多通路输出的规格......
  • Linux操作系统之tcpdump抓包工具详解
    前言①tcpdump工具简介:tcpdump是Linux操作系统中的字符界面的数据抓包分析软件。tcpdump可以将网络中传送的数据包完全截获下来提供分析②tcpdump是一个用于截取网络分组,并......
  • prometheus-主配置文件详解
    1.prometheus-主配置文件详解主机配置文件详解[root@iZj6cbgktk3zjpge312vq2Zprometheus]#catprometheus.yml#myglobalconfig#全局配置global:scrape_in......