包装类-Wrapper
创始人
2024-03-16 20:07:51
0

包装类的分类

  1. 针对八种基本数据类型相应的引用类型-包装类
  2. 有了类的特点,就可以调用对应的类中的方法
    在这里插入图片描述
    在这里插入图片描述

装箱和拆箱

Java是一种面向对象的编程语言,学习Java时就被明确灌输了一个概念:OOP,即面向对象编程。一切皆对象。但是基本类型是不具备Java中对象的某些特征,对象内部可以封装一系列属性和行为,但是这些在基本数据类型中都无法满足,所以对应的包装类型就应运而生了。也就是说单独的一个 int a = 100;那么这个a它只能是代表一个值,并无法把它当作一个对象来操作。
装箱就是把 值类型变成引用类型的一个过程,拆箱就是把一个引用类型重新变成值类型的过程。只有装过箱的才能拆箱

jdk5以前是需要手动装箱拆箱的:

演示:手动装拆箱

public class test1 {public static void main(String []args){int a = 100;//手动装箱Integer integer = new Integer(a);//第一种Integer integer1 = Integer.valueOf(a);//第二种System.out.println(integer);//输出100System.out.println(integer1);//输出100//手动拆箱int b = integer.intValue();System.out.println(b);//输出100}
}

运行结果:
100
100
100
由运行结果可以看出,所谓装箱拆箱,就是把一个基本类型变成引用类型的,然后又从引用类型变成基本类型的一种方式。
之所以要这样玩,是为了可以使用引用类型的方法等等…,但所保存的值是不会变化的

jdk5以后就是自动装拆箱了
演示:

public class test1 {public static void main(String []args){int a = 100;//自动装箱Integer integer = a;//其实底层还是使用Integer的方法实现的只不过省略了System.out.println(a);//自动拆箱int b = integer;System.out.println(b);//同理也是使用的方法,但是省略了}
}

运行结果:
100
100

其他的包装类也是类似的

包装类小测试

  1. 下面代码正确吗
Double d = 100d;
Float f = 1.5f;

正确,对包装类的自动装箱 等同于调用包装类的valueOf();方法

  1. 下面代码输出结果是什么
Object obj = true? new Integer(1) : new Double(2.0);
System.out.println(obj);

三元运算符,当为真是走第一个 为假时走第二个 所以走new Integer(1),而又因为当两种数据类型在进行比较时,会自动转换成比较大的类型,所以 1 会变成1.0,输出结果1.0

  1. 下面代码输出结果是什么
Object obj2;
if(true){
obj2 = new Ineger(1);
}else{
obj2 = new Double(2.0);}
System.out.pritln(obj2)

布尔值为真,走obj2 = new Ineger(1);这里是向上转型,所以输出 1

基本数据的包装类型与String类型的相互转换

把Intger类型转成String类型

public class test1 {public static void main(String []args){Integer n1 = 12345;String s1 = n1.toString();// 第一种使用toString方法System.out.println(s1);String s2 =String.valueOf(n1);//第二种 使用valueOf方法System.out.println(s2);String s3 = n1+" ";System.out.println(s3);//第三种使用+" "}
}

String 类型转成 Intger

public class test1 {public static void main(String []args){String s1 = "234";Integer i = new Integer(s1);//第一种使用默认自动装箱System.out.println(i);Integer i2 = Integer.valueOf(s1);//第二种 使用valueOf方法System.out.println(i2);}
}

Intger和Character的常用方法

在这里插入图片描述

Intger常见面试题

1.看以下代码输出什么

		Integer i = new Integer(1);Integer j = new Integer(1);System.out.println(i == j);Integer m = 1;Integer n = 1;System.out.println(m == n);Integer x = 128;Integer y = 128;System.out.println(x == y);

首先看第一个 ,由于 i和j都是new出来的对象,所以==用在比较对象时比较的是地址,所以是第一个输出false
第二个是自动装箱等同于调用valueOf(int x)方法,在这个方法的源码中如果传递进来的值>= -128 且 <= 127时就直接返回值
如果超出这个范围就new一个Intger对象保存
。而1在这个范围之内,所以不会返回对象,因为输出true
第三个,同理还是会调用valueOf(int x)方法,但由于128超出了valueOf(int x)里规定的范围所以会返回创建对象,因为又是对比地址,所以返回false,

2.下列代码会输出什么

Intger a = 127;
int b = 127;
System.out.println(a == b);
Intger c = 128;
int d = 128;
System.out.println(c == d);

在 == 的对比中,如果是基本类型和和基本类型的包装类进行对比,那么就是值对比
所以两个都是true;


相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...